root/homepage 上的 nginx 404 与 Django + Gunicorn

nginx 404 on root/homepage with Django + Gunicorn

我正在将我的网站从一个主机迁移到另一个主机。除了每当我导航到该站点的主页时,我都会看到 nginx 的 404 页面,迁移几乎已成功完成 99%。每个其他页面、静态和媒体文件都正确呈现。我绞尽脑汁试图找到解决方案,但我没有找到任何解决方案,更不用说遇到类似问题的人了(相反,其他人有一个工作主页,但所有其他人都有 404)。

我有两个不同的域(一个归我公司所有,另一个归我们所在的城市所有)。我已经更新了我拥有的域上的 DNS,以确保它可以与新主机一起使用,而且确实如此。当我使用主机 (example.com) 或服务器的 IP 地址进行导航时,网站会正确加载所有页面 - 除了 主页,这再次 - returns nginx 的404. 所有其他 404 错误显示我通过 Django 设置的 404 页面。

每当出现此问题时,gunicorn 错误日志都会添加一行,说明该服务是 'Booting worker with pid: ...'

nginx.conf --> 保存路径和端口,这个 conf 与我当前主机上的 conf 运行

http {

    client_max_body_size 30M;       

    open_file_cache max=1000 inactive=300s;
    open_file_cache_valid 360s;
    open_file_cache_min_uses 2;
    open_file_cache_errors off;

    upstream cgac_server {
    server unix:/root/cgac/cinema_backend/cinema_backend.sock fail_timeout=0;
    }
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen 80 default_server;

        location /static/ {
           expires 365d;
           root /root/cgac/cinema_backend/static/;
        }

        location /media/ {
           expires 365d;
           root /root/cgac/cinema_backend/media/;
        }

        location / {

           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $http_host;
           proxy_redirect off;

           if (!-f $request_filename) {
             proxy_pass http://cgac_server;
             break;
           }
    }
}

gunicorn.service --> gunicorn 的设置与活动服务器不同,但此文件中的参数相同,并且可以正常工作。

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/root/cgac/cinema_backend
ExecStart=/root/cgac-venv/bin/gunicorn --access-logfile /root/logs/gunicorn-access.log --error-logfile /root/logs/gunicorn-error.log --workers 3 --bind unix:/root/cgac/cinema_backend/cinema_backend.sock cinema_backend.wsgi:application

[Install]
WantedBy=multi-user.target

Django URL 模式 --> 也与工作站点 100% 相同

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),  # NOQA
    url(r'^fobi/', include('fobi.urls.view')),
    url(r'^fobi/', include('fobi.urls.edit')),
    url(r'^captcha/', include('captcha.urls')),
    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap',
        {'sitemaps': {'cmspages': CMSSitemap}}),
    url(r'^select2/', include('django_select2.urls')),
    url(r'^', include('cms.urls')),
)

有很多选项可以修复它

  1. 将您的上游置于 http {}
  2. 重新加载你的守护进程
  3. 重启你的gunicorn.service
  4. 你的cinema_backend一定是/run/cinema_backend.sock(什么是正常)
  5. 尝试使用不同的配置,例如 site-availabe

该问题与 nginx 或 gunicorn 配置完全无关。事实证明,主页轮播中的一张图片不知何故被损坏了,这让 Django 发疯了。我删除了 CMS 中修复问题的条目,然后继续重新上传文件,一切正常。