Ubuntu16下Apache2.4+WSGI部署Flask遇500错误及权限问题
解决Flask+Apache WSGI部署时的500内部服务器错误(权限拒绝问题)
问题根源
你遇到的500错误核心原因很明确:在通过Apache WSGI部署Flask的生产环境中,代码里调用了app.run(port=80, debug=True)。
Flask自带的app.run()是用来启动开发测试服务器的,而当用Apache mod_wsgi部署时,应该由Apache来接管HTTP请求并转发给Flask应用,完全不需要手动启动开发服务器。另外,80属于系统特权端口,只有root用户才能绑定,但Apache运行时会切换到www-data这个非root用户处理请求,这行代码直接触发了权限拒绝,最终导致500错误。
修复步骤
移除
app.run()代码
打开你的/var/www/TW96/tw96/index.py,删除或注释掉这一行:app.run(port=80,debug=True)提醒:哪怕是开发环境,部署到Apache时也别留这行代码;生产环境必须关闭debug模式,避免泄露敏感信息和安全风险。
确保目录权限正确
让Apache的运行用户www-data能正常访问你的应用文件:sudo chown -R www-data:www-data /var/www/TW96 sudo chmod -R 755 /var/www/TW96重启Apache生效
让所有修改生效:sudo systemctl restart apache2
额外注意事项
- Flask自带的开发服务器仅适合本地调试,生产环境必须通过WSGI兼容的服务器(如Apache mod_wsgi、Gunicorn)部署,绝对不要依赖
app.run()。 - 1-1023范围内的特权端口只能由root用户绑定,Apache本身会以root身份启动监听80端口,之后切换到普通用户处理请求,所以你的Flask应用完全不需要自己绑定端口。
内容的提问来源于stack exchange,提问作者Kasra
相关产品推荐
相关产品推荐

