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

Nginx无法转发至Gunicorn Socket,访问返回404错误求助

解决Nginx转发Gunicorn Socket返回404的问题

从你提供的配置和服务状态来看,有几个关键问题需要排查,我帮你一步步梳理:

1. Nginx缺失HTTPS Server配置(核心问题)

你当前的Nginx配置只处理了80端口的HTTP请求,并将其跳转到HTTPS,但完全没有配置处理443端口的HTTPS请求!这就是访问https://example.com返回404的直接原因——Nginx不知道该如何处理这个HTTPS请求。

修改你的Nginx配置,添加HTTPS的server块(记得替换证书路径):

# 处理HTTP请求,跳转到HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

# 处理HTTPS请求
server {
    listen 443 ssl;
    server_name example.com;

    # 替换成你的SSL证书路径
    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /var/www/example.com;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/example.com/example_app.sock;
    }
}

2. 检查Socket文件权限

虽然你的Gunicorn服务用www-data用户运行,但需要确认socket文件的权限是否允许Nginx(同样以www-data运行)访问:

ls -l /var/www/example.com/example_app.sock

正常输出应该是类似:

srwxrwxrwx 1 www-data www-data 0 Sep 29 16:08 example_app.sock

如果权限不对,可以在Gunicorn启动命令里添加--umask 0002来确保组用户有读写权限,修改example_app.service的ExecStart:

ExecStart=gunicorn --workers 1 --bind unix:example_app.sock --umask 0002 -m 007 run:app

修改后重启服务:

sudo systemctl daemon-reload
sudo systemctl restart example_app.service

3. 验证Gunicorn服务的可用性

可以直接通过socket发送请求,测试Gunicorn是否正常响应:

curl --unix-socket /var/www/example.com/example_app.sock http://localhost/

如果返回你的应用内容,说明Gunicorn没问题;如果报错,需要检查run.py里的app对象是否正确导出,以及应用是否有其他错误。

4. 检查Nginx日志

查看Nginx的错误日志,获取更详细的404原因:

sudo tail -f /var/log/nginx/error.log

如果日志里出现类似connect() to unix:/var/www/example.com/example_app.sock failed (13: Permission denied),说明就是权限问题,回到步骤2解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:47:45