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

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错误。

修复步骤

  1. 移除app.run()代码
    打开你的/var/www/TW96/tw96/index.py,删除或注释掉这一行:

    app.run(port=80,debug=True)
    

    提醒:哪怕是开发环境,部署到Apache时也别留这行代码;生产环境必须关闭debug模式,避免泄露敏感信息和安全风险。

  2. 确保目录权限正确
    让Apache的运行用户www-data能正常访问你的应用文件:

    sudo chown -R www-data:www-data /var/www/TW96
    sudo chmod -R 755 /var/www/TW96
    
  3. 重启Apache生效
    让所有修改生效:

    sudo systemctl restart apache2
    

额外注意事项

  • Flask自带的开发服务器仅适合本地调试,生产环境必须通过WSGI兼容的服务器(如Apache mod_wsgi、Gunicorn)部署,绝对不要依赖app.run()。
  • 1-1023范围内的特权端口只能由root用户绑定,Apache本身会以root身份启动监听80端口,之后切换到普通用户处理请求,所以你的Flask应用完全不需要自己绑定端口。

内容的提问来源于stack exchange,提问作者Kasra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:54:33