静态文件 404 未找到 ssl 错误 - Django + uWSGI + nginx
Static files 404 not found error with ssl - Django + uWSGI + nginx
我有一个 nginx 服务器启用了我的网站,它正在侦听 443 并将流量转发到我使用 uWSGI 的 django 应用程序服务器。我可以进入管理页面并登录,但不提供静态文件。我 运行 python3 manage.py collectstatic
。在使用 letsencrypt
添加 SSL 之前一切正常。在 nginx 访问日志中获取此信息:
"GET /static/admin/css/base.css HTTP/1.0" 404
这是我的反向代理 nginx 站点配置:
upstream staging_app_server {
server 52.52.52.52;
}
server {
listen 80;
server_name staging.site.com;
rewrite ^/(.*) https://staging.site.com/ permanent;
}
server {
listen 443;
server_name staging.site.com;
include snippets/ssl-staging.site.com.conf;
include snippets/ssl-params.conf;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
access_log /var/log/nginx/staging.access.log;
location / {
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_pass http://staging_app_server;
proxy_redirect http://staging_app_server https://staging_app_server;
}
location ~ /.well-known {
allow all;
}
}
以及应用服务器 nginx 配置:
server {
listen 80;
server_name staging.site.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/ubuntu/api/staticfiles;
}
location /media/ {
alias /home/ubuntu/api/media;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/api.sock;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param Host $host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Host $server_name;
uwsgi_param X-Forwarded-Proto $scheme;
}
}
我错过了什么?
您的 alias
陈述是错误的。 location
的值和 alias
的值都应以 /
结尾,或者都不以 /
.
结尾
此外,使用 root
,其中 alias
值以 location
值结尾。有关详细信息,请参阅 this document。
例如:
location /static/ {
alias /home/ubuntu/api/staticfiles/;
}
location /media/ {
root /home/ubuntu/api;
}
这有效:
location /static {
autoindex on;
alias /home/ubuntu/api/staticfiles;
}
感谢@richard-smith 为我指明了正确的方向!
我有一个 nginx 服务器启用了我的网站,它正在侦听 443 并将流量转发到我使用 uWSGI 的 django 应用程序服务器。我可以进入管理页面并登录,但不提供静态文件。我 运行 python3 manage.py collectstatic
。在使用 letsencrypt
添加 SSL 之前一切正常。在 nginx 访问日志中获取此信息:
"GET /static/admin/css/base.css HTTP/1.0" 404
这是我的反向代理 nginx 站点配置:
upstream staging_app_server {
server 52.52.52.52;
}
server {
listen 80;
server_name staging.site.com;
rewrite ^/(.*) https://staging.site.com/ permanent;
}
server {
listen 443;
server_name staging.site.com;
include snippets/ssl-staging.site.com.conf;
include snippets/ssl-params.conf;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
access_log /var/log/nginx/staging.access.log;
location / {
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_pass http://staging_app_server;
proxy_redirect http://staging_app_server https://staging_app_server;
}
location ~ /.well-known {
allow all;
}
}
以及应用服务器 nginx 配置:
server {
listen 80;
server_name staging.site.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/ubuntu/api/staticfiles;
}
location /media/ {
alias /home/ubuntu/api/media;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/api.sock;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param Host $host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Host $server_name;
uwsgi_param X-Forwarded-Proto $scheme;
}
}
我错过了什么?
您的 alias
陈述是错误的。 location
的值和 alias
的值都应以 /
结尾,或者都不以 /
.
此外,使用 root
,其中 alias
值以 location
值结尾。有关详细信息,请参阅 this document。
例如:
location /static/ {
alias /home/ubuntu/api/staticfiles/;
}
location /media/ {
root /home/ubuntu/api;
}
这有效:
location /static {
autoindex on;
alias /home/ubuntu/api/staticfiles;
}
感谢@richard-smith 为我指明了正确的方向!