Nginx
nginx + uwsgi - 什麼在提供靜態文件?
我使用 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/; }
}
我很確定 nginx 實際上並沒有為靜態文件提供服務,即使我註釋掉了該
location
塊,這些文件也是從某些東西得到服務的。我在 nginx 日誌中看到 200 個,在 uWsgi 日誌中看到 200 個。你怎麼知道哪一個在提供靜態文件?我想燒瓶應用程序也可以為他們服務?/opt/test/client/app/components/ 當然存在,並且對其他人是可讀的。有什麼方法可以強制 uwsgi 不處理這些請求嗎?
你確實需要一個
location
. 但這不是 nginx 不為您的靜態文件提供服務的原因。問題是您忘記在塊中指定
root
指令。server
所以 nginx 使用它的編譯預設值,它依賴於系統並且幾乎可以肯定不是你的 web 應用程序所在的位置。因此,所有請求,包括對靜態文件的請求,都會向上游發送到 uWSGI。要解決此問題,請設置一個
root
指向您應用的靜態資源的指令。server { root /srv/www/testapp;
或者,如果子目錄中只有靜態文件,則可以使用 和 指定 then ,
location
如alias
uWSGI 文件中所示。location /static { alias /srv/www/testapp/static; }