web-dev-qa-db-ja.com

nginx + uwsgi-静的ファイルを提供しているものは何ですか?

いくつかの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がこれらのリクエストを処理しないように強制する方法はありますか?

5
reptilicus

locationは必要です。しかし、それがnginxが静的ファイルを提供しない理由ではありません。

問題は、rootブロックでserverディレクティブを指定するのを忘れていることです。そのため、nginxはコンパイル済みのデフォルトを使用します。これはシステムに依存し、ほとんどの場合、Webアプリが配置されている場所ではありません。したがって、allリクエストは、静的ファイルを含めて、uWSGIの上流に移動します。

この問題を修正するには、アプリの静的リソースを指すrootディレクティブを設定します。

server {
    root /srv/www/testapp;

または、サブディレクトリに静的ファイルしかない場合は、locationおよびaliasWSGIのドキュメントに示されている を使用して指定できます。

location /static {
    alias /srv/www/testapp/static;
}
9
Michael Hampton