使用 nginx 和 gunicorn 运行烧瓶应用程序
Posted
技术标签:
【中文标题】使用 nginx 和 gunicorn 运行烧瓶应用程序【英文标题】:Running a flask app with nginx and gunicorn 【发布时间】:2012-11-19 13:16:50 【问题描述】:我是新手,只使用 nginx 来提供静态文件。我现在已经安装了烧瓶和 gunicorn。如果我运行gunicorn -b 127.0.0.2:8000 hello:app
然后从服务器中获取它,它运行良好。但是,如果我尝试从浏览器访问它,它会返回 404 错误(我在托管位于根目录的 wordpress 站点的服务器上运行它)。
烧瓶应用:
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;
我希望这是所有相关信息。如果没有,请告诉。谢谢!
【问题讨论】:
应该是from werkzeug.middleware.proxy_fix import ProxyFix
【参考方案1】:
这就是我在 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;
【讨论】:
切换了配置,仍然返回 404 Not Found 错误:/ 我弄清楚了它是什么——我在 nginx 配置中的 /flask2 中找到了我的位置,然后在我的烧瓶应用程序 @app.route('/') 中,它应该也是 /flask2跨度> 另外,我从来不需要做 app.wsgi_app = ProxyFix(app.wsgi_app)。这样做的目的是什么? 您不需要这样做,但它会从您的 nginx 配置(proxt_set_header X-Forwarded-For)设置来自 X-Forwarded-Host 的主机和来自 X-Forwarded-For 的远程地址 nginx 配置在哪里?以上是关于使用 nginx 和 gunicorn 运行烧瓶应用程序的主要内容,如果未能解决你的问题,请参考以下文章
无法在 gunicorn wsgi 服务器上运行烧瓶应用程序
为啥 nginx 不会用 django 和 gunicorn 显示静态内容?
Bad Gateway 502 - 在 centos 7 上使用 gunicorn nginx 部署 Flask (python 3.5.2)