You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将物理服务器IP与gunicorn和nginx搭配部署Flask应用

解决Ubuntu物理服务器部署Flask公网访问问题的步骤

1. 修改Gunicorn绑定地址

默认配置里Gunicorn常绑定127.0.0.1或内网IP,导致仅局域网可访问。你需要让它监听所有网卡:

  • 临时启动时调整命令:
    gunicorn --bind 0.0.0.0:5000 your_flask_app:app
    
    (替换your_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:app
    
    重启服务生效:
    sudo 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:33:11