我不知道nginx如何提供静态文件
/ etc / nginx / site-available / default:
upstream example.com {
server unix:/home/www/example/env/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
client_max_body_size 4G;
access_log /home/www/example/logs/nginx-access.log;
error_log //home/www/example/logs/nginx-error.log;
location /static/ {
alias /home/www/example/codeab/static/;
}
location /uploads/ {
alias /home/www/example/codeab/uploads/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/www/example/env/run/gunicorn.sock;
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/www/example/templates/;
}
error_page 404 /401.html;
location = /401.html {
root /home/www/example/codeab/templates/;
internal;
}
}
Django setting.py
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static_content/'),
)
STATIC_ROOT = os.path.join(BASE_DIR,'static/')
另外,我在DEBUG = False之前做了collectstatic
似乎nginx没有考虑上面的配置文件,因为404页面没有显示我的自定义401.html页面。
编辑完配置后,我将其链接到
启用的网站sudo ln -s /etc/site-available/default /etc/site-enabled/default
service nginx reload
sudo service nginx restart
请帮助,或让我知道如果我遗失了任何东西。
答案 0 :(得分:1)
我不知道确切的解决方案,但它开始致力于将我的gunicorn绑定从xxx.xxx.xx.xx:80
更改为xxx.xx.xx.xx:8000
并将配置编辑为 -
location / {
include proxy_params;
#proxy_pass http://unix:/home/www/example/env/run/gunicorn.sock;
proxy_pass http://xxx.xxx.xx.xx:8000;
}
我评论了sock文件的proxy_pass并添加了新行,如上所示。
答案 1 :(得分:0)
只需从
更改nginx服务器块中的配置即可location /static/ {
alias /home/www/example/codeab/static/;
}
要
location /static/ {
alias /home/www/example/codeab/static_content/;
}
原因,在命令python manage.py collectstatic
执行后
静态文件放在static_content文件夹中。
答案 2 :(得分:0)
Nginx从location /static/
下的nginx配置文件中定义的目录中提供静态文件,当你在定义的目录中找不到这样的静态资源时,重定向到你在nginx配置中定义的自定义404 html页面。
Django在Django的任何urls.py文件中找不到给定网址时显示自定义404 html页面,只要你在settings.py中设置Debug = False
并指向'TEMPLATES'-'DIRS'
设置包含您的自定义404 html文件的目录,如Django documentation中所述。
所以,实际上,nginx和Django显示相同的404 html页面的方式是不同的,彼此独立。