2012-12-01 90 views
17

我是新來的,只使用nginx來提供靜態文件。我現在已經安裝了燒瓶和gunicorn。如果我運行gunicorn -b 127.0.0.2:8000 hello:app,然後從服務器上獲取它,它會很好地工作。但是,如果我嘗試從瀏覽器訪問它,它將返回一個404錯誤(我正在運行這個服務器,該服務器託管一個位於root的wordpress站點)。用nginx和gunicorn運行燒瓶應用程序

燒瓶應用:

from flask import Flask 
from werkzeug.contrib.fixers import ProxyFix 
app = Flask(__name__) 

@app.route('/') 
def hello(): 
    return "Hello world!" 

app.wsgi_app = ProxyFix(app.wsgi_app) 

if __name__ == '__main__': 
    app.run() 

我的nginx的配置的相關部分:

location /flask { 
       proxy_set_header  Host   $http_host; 
       proxy_set_header  X-Real-IP  $remote_addr; 
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_\ 
for; 
       proxy_pass    http://127.0.0.2:8000; 
       proxy_redirect   off; 
    } 

我希望這是所有相關的信息。如果沒有,請告訴。謝謝!

回答

23

這是我爲我的瓶應用在Nginx的:使用套接字

運行gunicorn進程化:

sudo gunicorn app:app --bind unix:/tmp/gunicorn_flask.sock -w 4 -D 

相關nginx的配置:

upstream flask_server { 
     # swap the commented lines below to switch between socket and port 
     server unix:/tmp/gunicorn_flask.sock fail_timeout=0; 
     #server 127.0.0.1:5000 fail_timeout=0; 
    } 
    server { 
     listen 80; 
     server_name www.example.com; 
     return 301 $scheme://example.com$request_uri; 
    } 

    server { 
     listen 80; 
     client_max_body_size 4G; 
     server_name example.com; 

     keepalive_timeout 5; 

     # path for static files 
     location /static { 
      alias /path/to/static; 
      autoindex on; 
      expires max; 
     } 

     location/{ 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 

      if (!-f $request_filename) { 
       proxy_pass http://flask_server; 
       break; 
      } 
     } 
    } 

} 
+0

交換的配置,它仍然回報一個404 Not Found錯誤:/ – filipdobranic

+1

我想清楚它是什麼 - 我的位置在/ flask2的nginx配置文件中,然後在我的應用程序應用程序@ app.route('/')中,當它也應該是/ flask2 – filipdobranic

+0

另外,我從不需要做app.wsgi_app = ProxyFix(app.wsgi_app)。這樣做的目的是什麼? – TheOne