2013-07-22 9 views
9

Ho un app Flask in esecuzione con gunicorn sul http://127.0.0.1:4000:Proxy un'applicazione Flask in esecuzione su gunicorn ad un sottotracciato in nginx

gunicorn -b 127.0.0.1:4000 webapp:app 

Ora vorrei usare nginx come reverse proxy e in avanti http://myserver.com/webapp-http://127.0.0.1:4000 in un modo in cui ogni http://myserver.com/webapp/subpath passa a http://127.0.0.1:4000/subpath.

Il proxy/redirect funziona bene quando non si utilizza un sottotracciato:

upstream app { 
    server 127.0.0.1:4000 fail_timeout=0; 
} 

server { 
    listen 80 default; 
    client_max_body_size 4G; 
    server_name _; 

    location/{ 
     proxy_pass http://app; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host;  
    } 
} 

Come posso impostare

location /webapp { 
    #go to my gunicorn app, translate URLs nicely 
} 

Questo suggerimento da parte degli sviluppatori Flask non ha funzionato: http://flask.pocoo.org/snippets/35/

RISOLTO: il frammento http://flask.pocoo.org/snippets/35/ funziona! Ho avuto alcuni URL assoluti nei miei modelli (ad esempio /task/delete) e ho dovuto modificare tutto in url_for().

stupido ... ma ora funziona come previsto, ho la mia applicazione su 'http://myserver.com/subpath'

+0

Puoi mostrare i controller solo nel programma di app Flask? – Karthikeyan

+0

@Karthikeyan fatto! –

+0

Quindi, myserver.com/today funziona, ma non myserver.com/webapp/today, non è vero? – Karthikeyan

risposta

10

ho risolto il mio problema: Il frammento http://flask.pocoo.org/snippets/35/ funziona, ero così stupido da avere URL assoluti nei miei modelli. L'ho cambiato in url_for() e ora funziona come un incantesimo.

+0

+1 per aver riportato la risposta! :-) –

Problemi correlati