我使用 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;
}