[英]How to properly setup nginx as a reverse proxy for gunicorn and flask using subdomains, for both SSL and non-SSL configurations?
[英]Flask + gunicorn proxy setup?
我嘗試將 Flask、gunicorn 和 nginx 連接在一起,但最終得到 400 個錯誤請求和 500 個錯誤。 希望任何人都可以提供幫助。
nginx配置文件
server {
listen 8000;
server_name 127.0.0.1;
location /Hello {
uwsgi_pass 127.0.0.1:8081;
}
}
wsgi.py 片段:
from app import app
app.run(host="127.0.0.1", port=8081)
應用程序
app = Flask(__name__)
app.secret_key = "Not A Secret Anymore By Now"
@app.route('/Hello')
def hello():
return("Hello")
#if __name__ == "__main__":
# app.run(host='0.0.0.0', port=8000)
運行命令
export FLASK_APP=app
export FLASK_ENV=development
gunicorn --bind 0.0.0.0:8081 wsgi:app
測試用例
我試圖讓測試用例工作,但不知道為什么會出現錯誤,(nginx 重新啟動)。
謝謝你。
這里有幾個問題...
您的視圖函數結束時沒有返回語句,這可能是第一個 500 錯誤的原因。 更好的使用:
@app.route('/Hello')
def hello():
print("Hello")
return 'success'
此外,當您提到uwsgi.py
是 emtpy 時,那里沒有要導入的應用程序對象。 最好將 gunicorn 命令指向有效的應用程序對象:
gunicorn --bind 0.0.0.0:8081 app:app
此外,nginx 位置塊希望請求轉到http://example.com/Hello/Hello
。 所以最好像下面這樣制作位置塊。 (還要確保端口與您向 gunicorn 的--bind
標志提供的端口相同)。
location / {
proxy_pass http://127.0.0.1:8081;
}
在這里,我還根據gunicorn 部署(使用 nginx)文檔使用了proxy_pass
。
現在請求應該有效:
# Direct to app server...
curl -i http://localhost:8081/Hello
HTTP/1.1 200 OK
Server: gunicorn/20.0.4
# ...
success
並且:
# Via nginx:
curl -i http://localhost/Hello
HTTP/1.1 200 OK
Server: nginx
...
success
請注意,在所有接口 (0.0.0.0) 上運行 gunicorn 意味着如果沒有防火牆防止這種情況發生,外部請求可以直接到達應用服務器(繞過 nginx)。 可能值得將 gunicorn 綁定到本地接口: --bind 127.0.0.1:8081
。
通常還要小心,在自己配置這樣的東西時,有很多方法可以使安全性失誤。 祝你好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.