2013-07-22 74 views
9

Tôi có một ứng dụng Flask chạy với gunicorn trên http://127.0.0.1:4000:Proxy một ứng dụng Flask chạy trên gunicorn đến một subpath trong nginx

gunicorn -b 127.0.0.1:4000 webapp:app 

Bây giờ tôi muốn sử dụng nginx như một reverse proxy và chuyển tiếp http://myserver.com/webapp-http://127.0.0.1:4000 trong một cách mà mỗi http://myserver.com/webapp/subpath chuyển đến http://127.0.0.1:4000/subpath.

Proxy/chuyển hướng hoạt động độc đáo khi không sử dụng một subpath:

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

Làm thế nào tôi có thể thiết lập

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

Mẹo này từ các nhà phát triển Flask đã không làm việc: http://flask.pocoo.org/snippets/35/

SOLVED: Đoạn mã http://flask.pocoo.org/snippets/35/ hoạt động! Tôi có một vài URL tuyệt đối trong các mẫu của tôi (ví dụ: /task/delete) và phải thay đổi mọi thứ thành url_for().

Ngu ngốc ... nhưng bây giờ nó hoạt động như mong đợi, tôi có ứng dụng của tôi trên 'http://myserver.com/subpath'

+0

Bạn có thể chỉ hiển thị bộ điều khiển trong chương trình ứng dụng Flask không? – Karthikeyan

+0

@Karthikeyan đã hoàn tất! –

+0

Vì vậy, myserver.com/today đang hoạt động, nhưng không phải myserver.com/webapp/today, phải không? – Karthikeyan

Trả lời

10

tôi giải quyết vấn đề của tôi: Đoạn http://flask.pocoo.org/snippets/35/ không làm việc, tôi đã thật ngu ngốc để có URL tuyệt đối trong các mẫu của tôi. Tôi đã thay đổi điều đó thành url_for() và giờ nó hoạt động như sự quyến rũ.

+0

+1 để đưa câu trả lời trở lại! :-) –