Nginx

Django 和 Flask 與 gunicorn 在同一個 nginx 伺服器上

  • August 27, 2020

當我訪問 mysite.com 時,我目前在我的主站點上執行了一個 Djago 應用程序。但是,我希望 mysite.com/flaskapp 執行一個單獨的 Flask 應用程序。我能夠設置兩個支持 nginx 站點的配置文件並在不同的埠上執行每個應用程序,但由於各種原因,我想在同一個埠上執行它們(如果可能的話)。當我在我的 nginx 伺服器文件中配置我的 flaskapp/ 位置時,我收到 404 錯誤。

這是我的主管配置文件:

[program:MYSITE]
command=/var/www/html/MYSITE/prodenv/bin/gunicorn --workers 3 --bind unix:/var/www/html/MYSITE/public_html/MYSITE.sock MYSITE.wsgi
directory=/var/www/html/MYSITE/public_html
autostart=true
autorestart=true
stderr_logfile=/var/log/MYSITE.err.log
stdout_logfile=/var/log/MYSITE.out.log


[program:FLASKAPP]
directory=/var/www/html/MYSITE/public_html/FLASKAPP/api
command=/var/www/html/MYSITE/public_html/FLASKAPP/venv/bin/gunicorn --workers 3 --bind unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock FLASKAPP:app
autostart=true
autorestart=true
stderr_logfile=/var/log/FLASKAPP.err.log
stdout_logfile=/var/log/FLASKAPP.out.log

還有我的 nginx 站點啟用文件:

server {
   listen 80;
   listen [::]:80;

   server_name MYSITE;

   location = /favicon.ico { access_log off; log_not_found off; }

   location /static/ {
           root /var/www/html/MYSITE/public_html;
       expires 30d;
       }

   location / {
           include proxy_params;
           proxy_pass http://unix:/var/www/html/MYSITE/public_html/MYSITE.sock;
       }

   location /FLASKAPP/ {
       include proxy_params;
       proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
       }


}

有任何想法嗎?謝謝!

我想到了。我重寫了 url 以刪除子目錄,現在一切正常。

前:

   location /FLASKAPP/ {
       include proxy_params;
       proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
   }

後:

location /FLASKAPP/ {
   include proxy_params;
   proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
   rewrite ^/FLASKAPP(.*)$ $1 break;
}



     

proxy_path 中有錯字。你有proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock;,但應該有fastcgi_pass unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock;。刪除http://,更改proxy_passfastcgi_pass,一切都應該工作。

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