同一主机部署Flask与WordPress双框架:端口及路由分配技术问询
当然可以在同一台机器上同时部署Flask和WordPress!要解决80端口的分流问题,核心思路是用反向代理服务器(最常用的是Nginx)作为统一入口,根据URL路径把请求转发给对应的后端服务。下面是具体的实现步骤:
实现方案:Nginx反向代理分流
1. 先让两个服务监听非80端口
首先得让Flask和WordPress各自运行在独立的端口上,不要直接占用80:
- WordPress:如果用Apache部署,修改Apache的端口配置(比如
/etc/apache2/ports.conf),把Listen 80改成Listen 8080,重启Apache。如果是Nginx+PHP-FPM的WordPress架构,直接让WordPress的Nginx配置监听8080即可。 - Flask:不要用自带的开发服务器(仅用于测试),用生产级的应用服务器比如Gunicorn启动,绑定到本地5000端口:
(gunicorn -w 4 -b 127.0.0.1:5000 your_flask_app:appyour_flask_app是你的Flask应用文件名,app是Flask实例名)
2. 配置Nginx作为统一入口
安装Nginx后,编辑主配置文件或者新建一个站点配置(比如/etc/nginx/sites-available/mydomain.conf),添加以下内容:
server { listen 80; server_name www.myDomain.com; # 转发/page1路径到WordPress服务 location /page1 { proxy_pass http://localhost:8080; # 传递必要的请求头,确保后端服务能正确识别请求 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; } # 转发/page2路径到Flask服务 location /page2 { proxy_pass http://localhost:5000; 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; } # 可选:根路径默认转发到WordPress(根据你的需求调整) location / { proxy_pass http://localhost:8080; 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. 激活配置并验证
- 激活站点配置(如果是新建的文件):
ln -s /etc/nginx/sites-available/mydomain.conf /etc/nginx/sites-enabled/ - 检查Nginx配置语法是否正确:
nginx -t - 如果没问题,重启Nginx生效:
systemctl restart nginx
注意事项
- WordPress路径适配:如果WordPress的内容都在
/page1下,要在WordPress后台的“设置→常规”里,把“站点地址(URL)”和“WordPress地址(URL)”设置为http://www.myDomain.com/page1,避免内部跳转错误。 - Flask路由匹配:确保Flask的路由对应
/page2或者其子路径,比如:@app.route('/page2') def page2(): return "This is Flask's page2" @app.route('/page2/subpage') def page2_sub(): return "Subpage under Flask's page2" - 端口冲突排查:如果启动服务时提示端口被占用,用
netstat -tulpn | grep 端口号查看占用进程,调整端口即可。
这样配置后,用户访问www.myDomain.com/page1就会被转发到WordPress,访问www.myDomain.com/page2则会被转发到Flask,完美实现同一端口下的路径分流。
内容的提问来源于stack exchange,提问作者kevinzf




