我使用 uwsgi 在 Nginx 上托管我的 Django 项目。静态文件需要由 Nginx 单独提供
server {
listen 80;
server_name blog.foo.de;
location /static {
root /home/user/blog/staticfiles;
access_log off;
expires 30d;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/blog.socket;
}
access_log /var/log/nginx/blog.access.log combined;
error_log /var/log/nginx/blog.error.log warn;
}
我的 STATIC_URL 设置为http://blog.foo.de/static/ 文件夹 /home/user/blog/staticfiles 包含一个文件夹 static,文件收集到其中。因此,根据此处的其他帖子,一切都应该正常工作 -但事实并非如此。uwsgi 部分运行良好,但我只得到了404当我尝试访问静态文件时。
答案1
这需要进行一些常规清理:
- 您的
server
区块有两个location /
区块,这是不允许的;其中一个区块将被忽略。location
任何给定位置只能使用一个区块。 - 您的
server
块未定义root
。请确保仅在块中定义,而不在块中root
定义(除非位置需要不同的根)。server
location
我还建议在调试时不要转动off
或access_log
使用expires
,因为这会使隔离问题的原因变得更加困难。
但要真正解决这个问题,可以考虑完全重写它。一个非常简短的例子:
server {
location @django {
include uwsgi_params;
uwsgi_pass unix:/tmp/blog.socket;
}
location / {
try_files $uri $uri/ @django;
}
}
答案2
将此代码用于您的静态文件位置
location ^~ /static/ {
alias /home/user/blog/staticfiles;
}
此链接可能有助于您了解更多详细信息-https://stackoverflow.com/questions/23226357/django-nginx-static-files-404