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

CentOS 7.X下Systemd启动虚拟环境中Django+uWSGI服务无法访问求助

排查CentOS 7上uWSGI+Django服务可运行但无法访问的问题

看起来你的配置框架已经搭好了,但有几个关键细节可能导致无法访问。咱们一步步来排查:

1. 先确认uWSGI的端口协议类型(最可能的原因)

你的uWSGI配置里用的是socket = 127.0.0.1:8003,这个配置绑定的是uWSGI专用协议的端口,不是标准HTTP端口,所以直接用浏览器、curl这类HTTP客户端访问是会失败的。

解决方法:

  • 如果需要直接通过HTTP访问应用,把配置改成http-socket = 127.0.0.1:8003:
    [uwsgi]
    module = wsgi:application
    master = true
    processes = 5
    http-socket = 127.0.0.1:8003
    chmod-socket = 664
    vacuum = true
    die-on-term = true
    
  • 修改后重启服务:sudo systemctl restart django_03.service,再尝试访问。

2. 检查端口的访问范围

如果你的socket或http-socket绑定的是127.0.0.1,这个端口只能在服务器本地访问,外部机器是连不上的:

  • 如果需要外部机器访问,把绑定地址改成0.0.0.0:8003(允许所有网卡访问)
  • 如果是用Nginx反向代理的场景,绑定127.0.0.1是合理的,但要确保Nginx配置正确转发到这个端口,且Nginx服务正常运行。

3. 验证防火墙规则

CentOS 7默认启用firewalld,即使端口处于LISTEN状态,防火墙没开放端口的话外部也访问不了:

  • 查看当前开放的端口:sudo firewall-cmd --list-ports
  • 如果没看到8003/tcp,先添加临时规则测试:sudo firewall-cmd --add-port=8003/tcp
  • 测试没问题后添加永久规则:sudo firewall-cmd --add-port=8003/tcp --permanent,然后重载防火墙:sudo firewall-cmd --reload

4. 本地测试连通性,缩小问题范围

先在服务器本地测试,排除外部网络问题:

  • 用curl测试:curl http://127.0.0.1:8003(注意如果用的是socket而不是http-socket,这个命令会失败,因为协议不匹配)
  • 或者用telnet测试端口是否开放:telnet 127.0.0.1 8003
    • 如果本地能连接但返回内容异常,检查uWSGI日志;如果本地都连不上,再回头看配置和服务状态。

5. 查看服务日志,排查隐藏错误

你的systemd配置把错误输出到syslog了,查看日志找线索:

  • 查看django_03服务的日志:sudo journalctl -u django_03.service -f(-f实时追踪日志)
  • 或者查看syslog:sudo tail -f /var/log/messages
    重点看是否有模块加载失败、权限不足、虚拟环境激活异常这类错误。

6. 确认文件和目录权限

确保运行服务的myuser对应用目录和虚拟环境有足够权限:

  • 检查目录权限:ls -ld /opt/scripts/django/django_03
  • 检查虚拟环境权限:ls -ld /opt/scripts/django/django_03/django_03_env
  • 如果权限不足,调整权限:sudo chown -R myuser:myuser /opt/scripts/django/django_03

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:35:49