我在2台不同的计算机上安装了nodejs服务器和启用了SSL的nginx。请求/响应都正常工作,但我有一些问题让nginx缓存东西。我的服务器配置如下。最初,我在'location /'块中有代理缓存语句,当时它只缓存了我的索引页面。我读到nginx不会使用set-cookie标头缓存请求,所以我也忽略了它们(虽然它没有阻止我的索引页面先前被缓存)。我试着摆弄了整整一天,但是无法让nginx缓存我的js和css文件。所有此类请求都将路由回到我的节点服务器。访问日志和错误日志没有任何异常条目。我做错了什么?
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /webserver/nginx/credentials/cert;
ssl_certificate_key /webserver/nginx/credentials/key;
ssl_session_cache shared:SSL:10m;
location ~ .*\.(ico|css|js|gif|jpe?g|png)$ {
proxy_pass http://somewhere:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect http:// https://;
proxy_ignore_headers "Set-Cookie";
proxy_cache one;
proxy_cache_valid 200 1d;
proxy_cache_valid any 1m;
expires 7d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
location / {
proxy_pass http://somewhere:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect http:// https://;
}
}
答案 0 :(得分:1)
这就是我正在使用的(我没有启用SSL,但我认为这不是问题)。你错过了try_files行,它告诉nginx在传递给代理之前在根目录中查找文件。此外,它不是一个真正的缓存问题 - 没有任何静态文件请求应该使用此配置命中你的node.js后端。
server {
root /public;
listen 80;
server_name _;
index index.html index.htm;
charset utf-8;
# proxy request to node
location @proxy {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:3010;
proxy_redirect off;
break;
}
location / {
try_files $uri.html $uri $uri/ @proxy;
}
# static content
location ~ \.(?:ico|jpg|css|png|js|swf|woff|eot|svg|ttf|html|gif)$ {
access_log off;
log_not_found off;
add_header Pragma "public";
add_header Cache-Control "public";
expires 30d;
}
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
error_page 404 /404.html;
location = /404.html {
}
}