为什么静态内容请求要到uwsgi?

Why is static content request going to uwsgi?

我正在设置我的 Django 项目以使用 uwsgi 和 nginx。对于静态内容,我的 nginx.conf 中有以下内容:

location /static {
    alias /Users/me/mystatic; # your Django project's static files - amend as required
}

我已将 STATIC_ROOT 设置为 /Users/me/mystatic 并调用 collectstatic 将所有静态文件复制到该目录中。在我的 uwsgi 日志中,我看到了对静态内容的 GET 请求。既然 nginx 应该提供静态内容,为什么 GET 请求发送到 uwsgi?

确保 STATIC_URL 设置为 "/static/"

nginx conf 应如下所示:

server {

    listen  80 ;
    server_name XXXX;
    client_max_body_size 4G;            

    location /static/ {
        alias <path-to-collectstatic>
    }

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi_web.sock;
    }

}

注意 static

location 块中附加 /

最后,确保应用服务器 运行 DEBUG as False

问题是我将自己的 nginx.conf 放在 /usr/local/etc/nginx/sites-enabled 中,而不是 /usr/local/etc/nginx/servers。在/usr/local/etc/nginx/nginx.conf中,include servers/*;在最后。因此,UWSGI 仍在为静态文件提供服务。我遵循 django-nginx-uwsgi tutorial,我假设我必须创建一个新的 sites-enabled 目录。我正在使用 OS X.

我在 Linux 上看到了,不过,/etc/nginx/nginx.conf 在末尾包含 include /etc/nginx/sites-enabled/*;,因此本教程中的步骤适用于 Linux。

/static 末尾的额外 / 没有什么区别,但将它放在所有路径的末尾也无妨。