python nginx flask gunicorn

python - nginx flask



Ejecutando una aplicaciĆ³n matraz con nginx y gunicorn (1)

Así es como sirvo mis aplicaciones de matraz en Nginx:

Ejecute gunicorn daemonized usando un socket:

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

Configuración de nginx relacionada:

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; } } } }

Soy nuevo en esto y solo he estado usando nginx para servir archivos estáticos. Ahora he instalado matraz y gunicorn. Si ejecuto gunicorn -b 127.0.0.2:8000 hello:app y luego lo hago desde el servidor, funciona bien. Sin embargo, si intento acceder a él desde un navegador, devuelve un error 404 (lo estoy ejecutando en un servidor que aloja un sitio de wordpress que está ubicado en la raíz).

La aplicación matraz:

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()

Y la parte relevante de mi configuración 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; }

Espero que esta sea toda la información relevante. Si no, dile. ¡Gracias!