Nginx不在反向代理中缓存静态资产

Nginx不在反向代理中缓存静态资产,nginx,Nginx,我试图在节点(express)服务器上实现代理缓存,并希望缓存响应 下面的代码很好地缓存了api,但它不缓存静态资产 静态资产由下游服务(微服务)提供,因此我提到的public文件夹仅用于POC(使用express.static模块) 如何在nginx中缓存静态资产 Nginx配置: server { listen 80; location / { proxy_cache mycache; proxy_cache_lock on;

我试图在节点(express)服务器上实现代理缓存,并希望缓存响应

下面的代码很好地缓存了api,但它不缓存静态资产

静态资产由下游服务(微服务)提供,因此我提到的
public
文件夹仅用于POC(使用
express.static
模块)

如何在nginx中缓存静态资产

Nginx配置:

server {
    listen       80;
    location / {
        proxy_cache mycache;
        proxy_cache_lock on;
        proxy_cache_valid 60m;
        proxy_cache_use_stale updating;
        proxy_pass http://localhost:8085;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
    }
}
proxy_cache_path /tmp/cache keys_zone=mycache:10m levels=1:2 max_size=100m inactive=60m;
节点服务器:

const express = require('express')
const app = express()
const morgan = require('morgan')

app.enable('trust proxy')
app.use(morgan("short"))
app.use(express.static('src/public'))

app.get('/test', (req, res, next) => {
    return res.json({
        message: 'ok'
    })
})

app.listen(8085)

您可以使用以下Nginx配置轻松解决此问题

Nginx配置

server {
 listen       80;
 listen       [::]:80;
 server_name  my-site.com;
 location / {
    proxy_pass "http://localhost:3000";
 }

 location /public {
    root /PATH_TO_YOUR_NODE_APP_PUBLIC_DIRECTORY
    expires 30d;
 }
}

在express app.html文件中,使用/public前缀访问这些静态文件。示例:''

这有点胡乱猜测,但当您代理时,请求不会引用上游服务器(节点)的文件名。能否设置反向代理头并重试?它看起来应该是这样的:已经试过了(在发布问题之前),不起作用。我不明白如何设置头会是一个问题,我已经说过它只适用于静态资产。这不是我想要的,我会从一些下游服务(微服务)而不是文件夹中获取静态文件。此解决方案不适用于我的用例。我包含的公共目录仅用于poc。对不起,如果我之前没有在问题中提到,我现在就做。是这样吗。让我为你更改答案。