我目前有一个 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未找到”错误:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1d;
}
如何实现浏览器缓存,而不导致“404”问题?
答案1
这是一个简单的问题,因为您的位置声明顺序不正确。
你写道,你把静态文件位置子句后块location / {}
。这意味着将首先在那里检查您的静态文件。由于您的 uwsgi 套接字找不到文件路径,因此它返回 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 [...];
}
}
}
Digital Ocean 的优秀员工优秀的导游解释其工作原理。我建议通读一遍。
答案2
解决方案解决我的问题的方法是将子句放在每个块uwsgi_pass [.../uwsgi.sock];
内。location {...}