使用nginx / web2py实现浏览器缓存时静态资产的404错误

时间:2017-03-23 19:36:33

标签: caching nginx web2py uwsgi

我有一个web2py配置,在nginx之上运行,在为某些静态文件实现浏览器缓存时会产生404错误。问题描述为here,我现在在web2py上下文中提出这个问题,因为这可能与问题有关,或者因为可能存在某些特定于web2py的解决方法或解决方案。

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];
        }
    }
}

在上面的“location”子句之前或之后添加以下行会导致服务器停止提供与所讨论模式匹配的静态文件:

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

在前一个帖子中有人建议这可能是一个uwsgi问题,尽管问题可能是由其他问题引起的。如何在不引起“404”问题的情况下实现浏览器缓存?

1 个答案:

答案 0 :(得分:1)

在我看来,您只提供动态内容。此外,nginx会选择location块到process a request,并且需要完成。

在您的情况下,uwsgi块中的location /配置需要在您添加的任何新动态位置进行复制。例如:

server {
    ...

    include uwsgi_params;

    location / {
        uwsgi_pass [.../uwsgi.sock];
    }
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1d;
        uwsgi_pass [.../uwsgi.sock];
    }
}

您可以将include语句移动到外部块中并允许继承其语句(假设它只包含uwsgi_param语句)。