いくつかのflaskアプリのプロキシとしてnginxを使用し、ミドルウェアとして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/;
}
</ code>
}
Nginxが実際に静的ファイルを提供していないことは確かですが、location
ブロックをコメントアウトしても、ファイルは何かから提供されています。 nginxログに200があり、uWsgiログにも200があります。どれが静的ファイルを提供しているかをどのようにして知ることができますか? flaskアプリがそれらも提供している可能性があると思いますか?
/ opt/test/client/app/components /は確かに存在し、他の人が読むことができます。 uwsgiがこれらのリクエストを処理しないように強制する方法はありますか?
location
は必要です。しかし、それがnginxが静的ファイルを提供しない理由ではありません。
問題は、root
ブロックでserver
ディレクティブを指定するのを忘れていることです。そのため、nginxはコンパイル済みのデフォルトを使用します。これはシステムに依存し、ほとんどの場合、Webアプリが配置されている場所ではありません。したがって、allリクエストは、静的ファイルを含めて、uWSGIの上流に移動します。
この問題を修正するには、アプリの静的リソースを指すroot
ディレクティブを設定します。
server {
root /srv/www/testapp;
または、サブディレクトリに静的ファイルしかない場合は、location
およびalias
WSGIのドキュメントに示されている を使用して指定できます。
location /static {
alias /srv/www/testapp/static;
}