在EC2上部署带多路由的Flask应用遇404问题求助
解决EC2上Flask多路由404问题
检查WSGI配置(Apache+mod_wsgi场景)
如果是按照指南用Apache搭配mod_wsgi部署,大概率是配置未正确转发所有路由请求:
- 打开你的WSGI文件(比如
app.wsgi),确认内容正确指向Flask应用实例:
# 替换为你的Flask主文件名(不带.py)和实例名 from your_flask_app import app as application # 若用工厂函数初始化应用,改为: # from your_flask_app import create_app # application = create_app()
- 检查Apache虚拟主机配置文件(通常在
/etc/httpd/conf.d/your_app.conf),确保所有路径请求都转发到WSGI:
<VirtualHost *:80> ServerName 你的EC2公网DNS WSGIDaemonProcess flask_app user=ec2-user group=ec2-user threads=5 WSGIScriptAlias / /var/www/flask_app/app.wsgi <Directory /var/www/flask_app> WSGIProcessGroup flask_app WSGIApplicationGroup %{GLOBAL} Require all granted </Directory> # 静态文件配置(如有需要) Alias /static /var/www/flask_app/static <Directory /var/www/flask_app/static> Require all granted </Directory> </VirtualHost>
核心是WSGIScriptAlias /要指向你的WSGI文件,确保所有路径请求都交给Flask处理。
检查Flask路由代码
确认你的路由定义无拼写或语法错误,示例:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "首页" # 确保其他路由格式正确 @app.route('/about') def about(): return "关于页面" @app.route('/user/<username>') def show_user(username): return f"用户:{username}"
重启服务并验证
修改配置后重启Apache生效:
sudo systemctl restart httpd
如果用的是Nginx+Gunicorn,需检查Nginx配置是否将所有请求转发到Gunicorn端口:
server { listen 80; server_name 你的EC2公网DNS; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static { alias /var/www/flask_app/static; } }
重启Nginx和Gunicorn:
sudo systemctl restart nginx sudo systemctl restart gunicorn
排查日志定位问题
若仍未解决,查看服务错误日志找具体原因:
- Apache错误日志:
/var/log/httpd/error_log - Nginx错误日志:
/var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者Hasan Abdul Ghaffar
相关产品推荐
相关产品推荐

