如何将物理服务器IP与gunicorn和nginx搭配部署Flask应用
解决Ubuntu物理服务器部署Flask公网访问问题的步骤
1. 修改Gunicorn绑定地址
默认配置里Gunicorn常绑定127.0.0.1或内网IP,导致仅局域网可访问。你需要让它监听所有网卡:
- 临时启动时调整命令:
(替换gunicorn --bind 0.0.0.0:5000 your_flask_app:appyour_flask_app为你的Flask应用入口文件名,app为Flask实例名,端口5000可按需修改) - 若用systemd管理Gunicorn服务(推荐开机自启),编辑服务文件(如
/etc/systemd/system/gunicorn.service),修改ExecStart行的绑定地址:
重启服务生效:ExecStart=/usr/bin/gunicorn --workers 3 --bind 0.0.0.0:5000 your_flask_app:appsudo systemctl daemon-reload sudo systemctl restart gunicorn
2. 调整Nginx配置监听公网
打开你的Nginx站点配置文件(通常在/etc/nginx/sites-available/目录下,比如your_app.conf),修改server块:
- 让Nginx监听所有网卡的80端口(或直接指定公网IP):
listen 0.0.0.0:80; # 也可直接写你的公网IP,例如 listen 1.2.3.4:80; - 设置
server_name为你的域名或公网IP:server_name your_domain.com 1.2.3.4; - 确保
proxy_pass指向Gunicorn的运行地址(如果Gunicorn绑定本地则为http://127.0.0.1:5000,绑定内网IP则为http://10.0.0.80:5000)
配置完成后先检查语法正确性:
sudo nginx -t
无报错则重启Nginx:
sudo systemctl restart nginx
3. 开放防火墙端口
Ubuntu默认使用ufw防火墙,需开放HTTP(80)和HTTPS(443)端口:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw reload
若使用iptables,执行以下命令:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables-save | sudo tee /etc/iptables/rules.v4
4. 确认公网IP接入方式
- 如果服务器直接接入公网(用
ip addr show可查看网卡上的公网IP),完成以上步骤后即可通过公网IP访问应用。 - 如果服务器通过路由器/网关接入公网(比如家庭宽带场景),公网IP在路由器端,需在路由器后台设置端口转发:将路由器的80/443端口转发到服务器内网IP(10.0.0.80)对应的端口(例如80转发到80,或根据Nginx监听端口调整)。
5. 测试访问
- 先在服务器本地测试:
curl http://你的公网IP,检查是否返回Flask应用内容。 - 再用外部网络(如手机流量)访问公网IP,确认应用正常加载。
内容的提问来源于stack exchange,提问作者Colter
相关产品推荐
相关产品推荐

