一、问题/场景描述
在宝塔面板上部署了Python Web项目(如Django、Flask)后,项目默认只能在服务器本地(127.0.0.1)访问。为了让外网用户能够通过域名或公网IP访问到该项目,需要进行外网映射配置,这是一个常见的部署需求。
二、原因分析
宝塔面板创建的Python项目管理器项目,默认运行在特定的本地端口(如7800),并且仅绑定到127.0.0.1。这种设计是为了安全和管理方便,但同时也隔绝了外部直接访问。因此,我们需要借助宝塔面板内置的Web服务器(通常是Nginx或Apache)作为反向代理,将来自外网80或443端口的请求,转发到本地的Python应用端口,从而实现外网映射。整个过程涉及Python项目管理器配置、Web服务器配置以及可能的防火墙设置。
三、详细解决步骤
以下步骤以Nginx作为Web服务器、Flask/Django项目为例进行说明。
步骤1:确认Python项目运行状态
登录宝塔面板,进入“软件商店”,找到“Python项目管理器”。确保你的项目状态为“运行中”,并记下其运行的端口号(例如:127.0.0.1:7800)。
# 也可以在SSH终端中检查项目进程和端口
ps aux | grep python
netstat -tlnp | grep python
步骤2:添加网站并设置反向代理
在宝塔面板左侧点击“网站”,然后“添加站点”。填写你的域名或服务器公网IP,数据库和PHP版本根据需求选择或留空。创建成功后,点击新站点的“设置”。
进入“反向代理”选项卡,点击“添加反向代理”。代理名称可自定义(如“python_app”),目标URL填写你的Python项目本地访问地址,例如 http://127.0.0.1:7800。点击“提交”。
# 成功添加后,Nginx配置会自动生成类似以下内容
location / {
proxy_pass http://127.0.0.1:7800;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
步骤3:调整Python项目配置(可选但重要)
对于Django或Flask项目,需要确保应用可以处理代理转发的请求。以Flask为例,可能需要修改启动文件。
# app.py 或 wsgi.py 示例
from flask import Flask
app = Flask(__name__)
# 关键:允许所有主机访问,或指定你的域名
# 方式一:允许所有(开发调试)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7800)
# 方式二:在生产环境中,通常通过WSGI服务器(如gunicorn)启动,并在Nginx层控制访问。
对于Django,需在settings.py中设置ALLOWED_HOSTS。
# settings.py
ALLOWED_HOSTS = [‘your-domain.com‘, ‘your-server-ip‘] # 替换为你的域名或IP
步骤4:放行防火墙端口
在宝塔面板的“安全”页面,确保服务器的防火墙(如firewalld或iptables)和宝塔系统防火墙已放行80(HTTP)和443(HTTPS)端口。Python项目本身的本地端口(如7800)通常无需对外网开放。
# 宝塔面板通常提供图形化操作,也可通过命令检查
sudo firewall-cmd --list-ports # CentOS/firewalld
sudo ufw status # Ubuntu/ufw
步骤5:测试访问
完成以上配置后,重启Nginx服务。然后在浏览器中输入你的域名或服务器公网IP,应该就能访问到你的Python Web应用了。
# 重启Nginx
sudo systemctl restart nginx
# 或通过宝塔面板“网站”页面,对应站点点击“重载配置”
四、注意事项
配置前请确保域名已正确解析到服务器IP。若使用HTTPS,需先在宝塔面板为网站申请SSL证书并开启强制HTTPS。反向代理配置后,静态文件建议也通过Nginx直接处理以提升性能,可在网站设置中配置静态文件规则。定期检查Python项目进程是否稳定运行。
五、适用环境
本教程适用于在宝塔面板上使用Python项目管理器部署的Django、Flask等Web框架项目。
