![Nginx + Gunicorn + Django - nginx 不允許靜態文件](https://rvso.com/image/617250/Nginx%20%2B%20Gunicorn%20%2B%20Django%20-%20nginx%20%E4%B8%8D%E5%85%81%E8%A8%B1%E9%9D%9C%E6%85%8B%E6%96%87%E4%BB%B6.png)
更新了程式碼 - 但這仍然不起作用。
設定.py
STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/'
STATIC_URL = '/static/'
nginxconf :: /etc/nginx/sites-enabled/mysite
server {
server_name ec2-x-x-x-x.compute-1.amazonaws.com;
access_log /home/ubuntu/virtualenv/mysite/error/access.log;
error_log /home/ubuntu/virtualenv/mysite/error/error.log warn;
connection_pool_size 2048;
location /static/ {
#alias /home/ubuntu/virtualenv/mysite/homelaunch/static/;
#alias /static/;
root /home/ubuntu/virtualenv/mysite/homelaunch/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#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"';
}
}
槍鳥配置-
command = '/usr/local/bin/gunicorn'
logfile = "/home/ubuntu/virtualenv/mysite/error/gunicorn.log"
loglevel = "info"
pythonpath = '/home/ubuntu/virtualenv/mysite'
bind = '127.0.0.1:8001'
img 目錄和 css 目錄的完整路徑:
/home/ubuntu/virtualenv/mysite/homelaunch/static/css
/home/ubuntu/virtualenv/mysite/homelaunch/static/img
在 error.log 中收到錯誤:
001/favicon.ico", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com"
2013/09/02 16:57:42 [error] 2819#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: ec2-xx-xx-xx-xx.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com"
有什麼明顯錯誤的地方嗎?當我嘗試透過輸出的 html 來源查看 img 和 css 檔案時,我仍然收到 404 錯誤。
答案1
該答案已被編輯以總結解決方案。
在nginx的配置中
更換:
alias /home/ubuntu/virtualenv/mysite/homelaunch/;
和:
root /home/ubuntu/virtualenv/mysite/homelaunch/;
根據文件:“當位置與指令值的最後一部分匹配時......最好使用根指令”
更換:
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
和:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
在gunicorn的配置中
更換:
bind = 'ec2-x-x-x-x.compute-1.amazonaws.com:8001'
和:
bind = '127.0.0.1:8001'
在 django 的設定中
設定STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/'
正確的絕對檔案系統路徑。
設定DEBUG = True
以獲得更詳細的錯誤訊息。
答案2
替換這個:
location /static/ {
alias /home/ubuntu/virtualenv/mysite/homelaunch/;
}
對於這個:
location /static/ {
alias /home/ubuntu/virtualenv/mysite/homelaunch/static/;
}
如果您使用別名,則需要輸入絕對路徑,因為您已經在 settings.py 上定義了靜態目錄
STATIC_URL = '/static/'
因此,如果您將別名放在此目錄 /home/ubuntu/virtualenv/mysite/homelaunch/;
Nginx 認為靜態檔案位於 /home/ubuntu/virtualenv/mysite/homelaunch/ 而非 /home/ubuntu/virtualenv/mysite/homelaunch/static
抱歉我的英文不好,我努力提升:(
我希望你能理解我。