开发者社区 问答 正文

求助:Nginx+Gunicorn部署 Django后遇到Not Found错误

问题描述: Nginx+Gunicorn部署 Django后遇到Not Found错误

image.png

服务器版本:CentOS 7.5 x64 说明:在虚拟环境中使用django自带的runserver运行(0.0.0.0:8000)后,使用公网IP:端口/index可以正常访问项目,关闭debug后使用

pipenv run gunicorn blogproject.wsgi -w 2 -k gthread -b 0.0.0.0:8000

运行也可以正常访问,但是开启nginx后运行就出现如图错误。

/etc/nginx/conf.d/django-blog.conf配置如下

[zijeak@VM_16_8_centos conf.d]$ cat django-blog.conf
server {
    charset utf-8;
    listen 80;
    server_name 119.27.169.70;

    location /static {
        alias /home/zijeak/apps/django-blog/static;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8000;
    }
}

查看nginx日志如下:

[zijeak@VM_16_8_centos conf.d]$ sudo nginx -t
[sudo] password for zijeak: 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

项目目录如下:

image.png

遇到了同样的问题,在CSDN看到了,希望阿里云团队能够给出正确、标准的答案~请查看

展开
收起
刘刚_ 2020-05-22 21:16:49 973 分享
分享
版权
举报
阿里云 AI 助理回答

遇到 "Not Found" 错误,通常意味着Nginx成功接收到了请求,但是Gunicorn没有正确处理或者返回了错误信息。根据你的描述和配置,这里有几个可能的问题点和解决方法:

  1. Gunicorn监听地址:你提到直接通过Gunicorn访问时是正常的,但请注意,当Nginx作为前端代理时,Gunicorn应该绑定到localhost(即127.0.0.1)而不是0.0.0.0,以避免安全风险和潜在的端口冲突。不过,你当前的Gunicorn命令已经绑定了0.0.0.0:8000,理论上Nginx应该能够转发请求过去。尽管如此,请确保Gunicorn正在运行且没有被防火墙规则或SELinux阻止。

  2. Django设置:确认你的Django项目中的settings.py文件是否正确配置了WSGI_APPLICATION指向正确的WSGI入口点,并且静态文件路径是否正确设置。例如:

    WSGI_APPLICATION = 'blogproject.wsgi.application'
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    确保STATIC_ROOT目录存在且包含所需的静态文件。

  3. Nginx配置:你的Nginx配置看起来基本正确,但可以尝试添加一些额外的调试信息和优化配置,比如增加日志级别、错误页面重定向等,以便更好地诊断问题:

    server {
       ...
       error_log /var/log/nginx/django-blog.error.log debug;
       access_log /var/log/nginx/django-blog.access.log;
    
       location / {
           proxy_pass http://127.0.0.1:8000;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_redirect off;
           # 如果有静态文件未找到的情况,可以考虑这个设置
           proxy_intercept_errors on;
           error_page 404 = @django_static;
       }
    
       location @django_static {
           rewrite ^/static/(.*)$ /static/$1 break;
           expires 30d;
           add_header Cache-Control public;
           try_files $uri $uri/ =404;
       }
    }
    
  4. 检查Gunicorn日志:Gunicorn也应该有自己的日志输出,通常是标准输出或指定的日志文件。查看这些日志可以帮助定位问题,看看是否有任何错误信息提示。

  5. 重启服务:在修改配置后,确保重启了Nginx和Gunicorn服务。你可以使用以下命令来操作:

    sudo systemctl restart nginx
    # 假设你用systemd管理Gunicorn,如果使用其他方式启动,请相应调整
    sudo systemctl restart gunicorn
    
  6. 防火墙设置:确保CentOS的防火墙(通常是firewalld)允许80端口的流量。

按照上述步骤检查和调整后,如果问题仍然存在,建议查看Nginx的access和error日志以及Gunicorn的日志,以获取更详细的错误信息进行进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等