我知道这是一个非常幼稚的问题,但尽管我发现这个问题很简单,却找不到任何解决方案。
我有一个使用 gunicorn 部署的 django 应用程序。静态文件由 nginx 服务器提供,其 URL 如下:myserver.com/static/admin/css/base.css
。但是,我的 django 应用程序一直在查找静态文件,myserver.com:8001/static/admin/css/base.css
显然失败了(404)。
我不知道如何修复这个问题。这是 Django 还是 nginx 的问题?这是我的 nginx 配置文件:
server {
server_name myserver.com;
access_log off;
location /static/ {
alias /home/myproject/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
谢谢您的帮助 !
答案1
我不知道为什么你的配置中有这个。它什么也不做。
proxy_set_header X-Forwarded-Host $server_name;
无论如何,您都没有传递标题Host
,这是我能想到的您的 URL 被破坏的最可能的原因。
尝试设置:
proxy_set_header Host $http_host;
答案2
首先确保你在 settings.py 中已禁用调试
DEBUG = False
检查静态文件路径和 URL(例如)
`STATIC_URL = '/static/'
STATICFILES_DIRS = { “/home/myproject/static/”, }`
在 nginx 中定义你的静态 URL(例如):
location /static/ { alias /home/myproject/static/; expires 1d; }
答案3
不是django的问题,而是nginx代理配置
这个问题与这个非常相似:(我直接粘贴链接,因为它是 serverfault 上的内部链接,不想重复答案)
甚至添加配置也可能proxy_redirect off;
会有location
效果。