nginx + uwsgi-什么是服务静态文件?

nginx + uwsgi-什么是服务静态文件?

我使用 nginx 作为几个 flask 应用程序的代理,并使用 uwsgi 作为中间件。这是我的测试应用程序的 nginx 配置。


server {
    listen      80;
    server_name test.myapp.com www.test.myapp.com;
    charset     utf-8;
    client_max_body_size 250M;
    location / { try_files $uri @testapp; }

location @testapp {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/testapp_uwsgi.sock;
}

location /forecaster/components/ {
    alias /opt/test/client/app/components/;
}

}

不过,我很确定 nginx 实际上并没有提供静态文件,即使我注释掉该location块,文件也会从某个地方获取服务。我在 nginx 日志中看到 200,在 uWsgi 日志中也看到 200。你怎么知道哪一个在提供静态文件?我想 flask 应用程序也可以提供它们?

/opt/test/client/app/components/ 肯定存在,并且其他人可以读取。有没有办法强制 uwsgi 不处理这些请求?

答案1

你确实需要一个location。但这不是 nginx 不提供静态文件服务的原因。

问题是你忘记在块root中指定指令server。因此,nginx 使用其编译后的默认值,该默认值与系统相关,并且几乎肯定不是你的 Web 应用所在的位置。因此,全部请求(包括静态文件)会上游到 uWSGI。

要解决该问题,请设置一个root指向应用静态资源的指令。

server {
    root /srv/www/testapp;

或者如果子目录中只有静态文件,则可以使用location和指定alias 如 uWSGI 文档所示

location /static {
    alias /srv/www/testapp/static;
}

相关内容