Flask + Gunicorn + Nginx 搭建 Web 服务 Flask Flask 是一个使用 Python 编写的轻量级 Web 框架,被广泛用于构建 Web 应用程序和 API, 开发者可以通过 Flask 在搭建本地 Web 服务。
1 2 3 4 5 6 7 8 9 from flask import Flask, request app = Flask(__name__)@app.route('/' ) def index () return "Hello World!" if __name__ == "__main__" : app.run(port=5000 )
这样,我们就创建了一个名为 app 的 Flask 应用程序,并定义了一个路由 /,当访问 127.0.0.1:5000
时 返回 “Hello World!”,
Gunicorn Gunicorn 是一个 Python WSGI HTTP 服务器,它可以帮助开发者在生产环境中运行 Flask 应用程序。
1 2 3 4 5 6 7 8 9 10 ➜ ~ gunicorn -h usage: gunicorn [OPTIONS] [APP_MODULE] options: ... -b ADDRESS, --bind ADDRESS The socket to bind. [['127.0.0.1:8000']] ... -w INT, --workers INT The number of worker processes for handling requests. [1]
将上述 Flask 程序保存为 example.py, 则
1 gunicorn -w 4 -b 0.0.0.0:5555 example:app
其中 example:app 代表了 example.py 中的 app 对象,启动后就可以通过 公网IP:端口访问。
Nginx 在 Nginx 的配置文件中添加一个新的服务器块,用于反向代理到 Gunicorn 服务器。进入Nginx 的默认配置文件目录 /etc/nginx/conf.d
。新建 ${YOUR_SERVICE_NAME}.conf
文件,内容可以参考
1 2 3 4 5 6 7 8 9 10 server { listen 80 ; server_name YourDomain.com; location / { proxy_pass http://127.0.0.1:${GUNICORN_SERVICE_PORT} ; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; } }
如果需要安装配置SSL证书,可以参考 免费SSL证书概述 , 相应的配置文件可以参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 server { listen 80 ; server_name YourDomain.com; location / { return 307 https://$host $request_uri ; } }server { listen 443 ssl; server_name YourDomain.com; ssl_certificate <cert-file-name>.pem; ssl_certificate_key <cert-file-name>.key; ssl_session_timeout 5m ; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3 ; ssl_prefer_server_ciphers on ; location / { proxy_pass http://127.0.0.1:${GUNICORN_SERVICE_PORT} ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_connect_timeout 500s ; proxy_read_timeout 500s ; proxy_send_timeout 500s ; } }
保存后检查是否存在语法错误并重启
1 2 3 nginx -s reload nginx -t sudo service nginx restart
之后再域名记录中添加一条 A Record
,Value 值 为服务器地址,过后就可以通过域名访问服务器上的 Web 服务了。
Reference