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')),
)
有很多选项可以修复它
- 将您的上游置于 http {}
- 重新加载你的守护进程
- 重启你的gunicorn.service
- 你的cinema_backend一定是/run/cinema_backend.sock(什么是正常)
- 尝试使用不同的配置,例如 site-availabe
该问题与 nginx 或 gunicorn 配置完全无关。事实证明,主页轮播中的一张图片不知何故被损坏了,这让 Django 发疯了。我删除了 CMS 中修复问题的条目,然后继续重新上传文件,一切正常。
我正在将我的网站从一个主机迁移到另一个主机。除了每当我导航到该站点的主页时,我都会看到 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')),
)
有很多选项可以修复它
- 将您的上游置于 http {}
- 重新加载你的守护进程
- 重启你的gunicorn.service
- 你的cinema_backend一定是/run/cinema_backend.sock(什么是正常)
- 尝试使用不同的配置,例如 site-availabe
该问题与 nginx 或 gunicorn 配置完全无关。事实证明,主页轮播中的一张图片不知何故被损坏了,这让 Django 发疯了。我删除了 CMS 中修复问题的条目,然后继续重新上传文件,一切正常。