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

Caching 404使用nginx/web2py实现浏览器缓存时静态资产的错误,caching,nginx,web2py,uwsgi,Caching,Nginx,Web2py,Uwsgi,我有一个web2py配置,在nginx之上运行,当为某些静态文件实现浏览器缓存时,会产生404错误。这个问题已经被描述了,我现在在web2py上下文中提出这个问题,因为这可能与这个问题有关,或者因为可能有一些特定于web2py的变通方法或解决方案 nginx.conf如下所示: worker_processes 3; events { worker_connections 1024; } http { access_log [/...]; error_log

我有一个web2py配置,在nginx之上运行,当为某些静态文件实现浏览器缓存时,会产生404错误。这个问题已经被描述了,我现在在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”问题?

在我看来,您只提供动态内容。另外,
nginx
选择一个
位置
块,它需要完成

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

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_参数
语句)。

尝试添加行
include uwsgi_参数;uwsgi_pass[…/uwsgi.sock]到新的位置块。@RichardSmith-谢谢。在仔细检查之后,我相当确定它是有效的(尽管在过去几个小时处理了这个问题之后,我有一半的期望会再次出错)。如果你想把它记下来作为一个答案,我会把它标记为正确的。我尝试使用浏览器缓存来处理404错误,我发现了一些奇怪的情况。当我输入URL“testsite.com/testblabla.png”时,我们得到一个404响应,带有e-tag,当我刷新同一个浏览器选项卡时,它没有使用浏览器缓存,就好像我在一个新选项卡中打开了它从浏览器缓存获得的相同URL一样。这太奇怪了,而且firefox根本没有使用浏览器缓存来显示404状态。伙计们,如果你们也面临同样的问题,请告诉我