我不知道nginx怎麼服務於靜態文件的Django + Nginx的+ Gunicorn - 404靜態文件時,調試是假
的/ etc/nginx的/現場可用/默認:
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的設置的.py
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static_content/'),
)
STATIC_ROOT = os.path.join(BASE_DIR,'static/')
而且,我做了DEBUG之前collectstatic =假
看來,nginx的是不考慮上面的配置文件,因爲404頁面沒有顯示我的自定義401.html頁面。
編輯配置後,我把它鏈接到由
sudo ln -s /etc/site-available/default /etc/site-enabled/default
service nginx reload
sudo service nginx restart
啓用站點請幫幫忙,或者讓我知道如果我錯過任何東西。
歡迎來到Stack Overflow!感謝您發佈這樣的問題的詳細描述,這有助於很多。在我們深入到問題的要點之前,有幾件事情。如果NGINX沒有看到配置文件,它是如何爲你的靜態文件返回404的?你在最後說的鏈接是正確的,但是如果它使用include/etc/site-enabled/*;或者include/etc/site-enabled/*,你需要檢查'nginx.conf' .conf;'如果它是'* .conf',則需要將'default'重命名爲'default.conf'。另外,你的'site-enabled'和'site-available'位於'/ etc /' –
這有點奇怪,這不是標準安裝。在您的自定義4xx模板的情況下:如果NGINX正在提供這個,它需要是一個靜態的HTML文件。它沒有任何模板標籤,因爲它沒有被Django處理。我的建議是使用Django的內部錯誤模板。最後,關於你的靜態文件,配置是正確的。我唯一要改變的是'location ^〜/ static/{'這樣NGINX就知道它必須做一個正則表達式匹配而不是直接字符串比較。 –
嗨Keenan,謝謝你的快速反應。我檢查了我的nginx.conf,它是'include/etc/site-enabled/*;'所以文件名是正確的,即'默認' – anuj249