nginx - 仅与后端或 404 一起服务,根目录中没有静态文件

nginx - 仅与后端或 404 一起服务,根目录中没有静态文件

我正在尝试使用后端(在本例中为 flask 的 uwsgi)来处理所有请求,如果后端没有这样的路径,nginx 应该返回 404。

不知怎的,我只能在使用时让后端接管

try_files $uri @uwsgi;

但是这样你就可以访问根目录中的所有文件。我不想提供根目录中的所有文件。

我也尝试过这个:

try_files @uwsgi =404;

但即使该路径已在我的 Flask 应用程序中定义,也会出现 404 错误。

更多背景信息:Ubuntu 14.04、nginx 1.4.6

    location @uwsgi {
            include uwsgi_params;
            uwsgi_pass unix:$document_root/myapp.sock;
    }

    location / {
            try_files $uri @uwsgi;
    }

    location /static/ {
            try_files $uri =404;
    }

Flask 应用程序如下:

@app.route('/test')
def hello_world():
    return 'Hello World!'

因此,当我访问 example.com/test 时,我希望让 flask 后端处理这个问题。但我不希望 nginx 为根目录中的所有文件提供服务。

答案1

try_files如果您从未尝试过任何文件,并且始终想将其传递给 WSGI 处理程序,那么为什么要使用它?您是否尝试过简单地将 uwsgi_pass 设为根位置?

location / {
    include uwsgi_params;
    uwsgi_pass unix:$document_root/myapp.sock;
}

您可以将它与静态位置/静态服务器名称相结合,该静态位置/静态服务器名称从常规文件夹中提供文件,但仅限于该静态 URL。

相关内容