Nginx 实现浏览器缓存时静态资源出现 404 错误

Nginx 实现浏览器缓存时静态资源出现 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未找到”错误:

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 {...}

相关内容