当在nginx上实现浏览器caching时,静态资产的404错误

目前我有一个nginx.conf文件,看起来像这样(用括号代替敏感数据):

worker_processes 3; events { worker_connections 1024; } http { access_log [/...]; error_log [/...] crit; include mime.types; sendfile on; server { server_name [...] [...]; return 301 [...] $request_uri; } server { listen 127.0.0.1:[...]; root [/...]; location / { include uwsgi_params; uwsgi_pass [.../uwsgi.sock]; } } } 

如果我在现有位置{…}子句之后添加以下行,如此处所示 ,加载网站将为图像,CSS和js资产产生“404未find”错误:

 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1d; } 

我怎样才能实现浏览器caching,而不会导致“404”的问题?

这是一个简单的问题,您的位置声明无序。

你写道,你把location / {}之后的静态文件位置子句。 这意味着您的静态文件将首先在那里进行检查。 由于你的uwsgi套接字找不到文件path,它将返回404。

你想要什么看起来更像这样。

 http { [..] server { server_name example.com; return 301 ^ $request_uri; } server { listen localhost; root /path/to/webroot/; location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1d; } location / { include uwsgi_params; uwsgi_pass [...]; } } } 

数字海洋公司的优秀人员会为您解释这是如何工作的。 我build议阅读。

解决我的问题的解决scheme是把uwsgi_pass [.../uwsgi.sock]; 每个location {...}块内的子句。