Nginx

nginx + uwsgi - 什麼在提供靜態文件?

  • January 27, 2014

我使用 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 ,locationalias uWSGI 文件中所示

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

引用自:https://serverfault.com/questions/570203