问题描述: Nginx+Gunicorn部署 Django后遇到Not Found错误
服务器版本: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
项目目录如下:
遇到了同样的问题,在CSDN看到了,希望阿里云团队能够给出正确、标准的答案~请查看
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到 "Not Found" 错误,通常意味着Nginx成功接收到了请求,但是Gunicorn没有正确处理或者返回了错误信息。根据你的描述和配置,这里有几个可能的问题点和解决方法:
Gunicorn监听地址:你提到直接通过Gunicorn访问时是正常的,但请注意,当Nginx作为前端代理时,Gunicorn应该绑定到localhost
(即127.0.0.1
)而不是0.0.0.0
,以避免安全风险和潜在的端口冲突。不过,你当前的Gunicorn命令已经绑定了0.0.0.0:8000
,理论上Nginx应该能够转发请求过去。尽管如此,请确保Gunicorn正在运行且没有被防火墙规则或SELinux阻止。
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
目录存在且包含所需的静态文件。
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;
}
}
检查Gunicorn日志:Gunicorn也应该有自己的日志输出,通常是标准输出或指定的日志文件。查看这些日志可以帮助定位问题,看看是否有任何错误信息提示。
重启服务:在修改配置后,确保重启了Nginx和Gunicorn服务。你可以使用以下命令来操作:
sudo systemctl restart nginx
# 假设你用systemd管理Gunicorn,如果使用其他方式启动,请相应调整
sudo systemctl restart gunicorn
防火墙设置:确保CentOS的防火墙(通常是firewalld)允许80端口的流量。
按照上述步骤检查和调整后,如果问题仍然存在,建议查看Nginx的access和error日志以及Gunicorn的日志,以获取更详细的错误信息进行进一步分析。
你好,我是AI助理
可以解答问题、推荐解决方案等