2011-07-13 151 views
1

當我提到django 1.3的靜態文件服務的新方式時,我有點生疏,但是我確信它不能是django,因爲這裏有錯。使用django + fastcgi從nginx提供靜態文件debian

我試圖在debian安裝的雲服務器上運行帶有nginx + fastcgi的django應用程序。我們目前只有一臺服務器(在我們開發的時候),並且會考慮使用負載平衡器來運行多臺服務器,這樣做會更簡單一些,但是我實際上難以獲得nginx來提供靜態文件。

我已經按照各種教程設立nginx.conf服務文件

server { 
    listen 80; 
    server_name 127.0.0.1; 

    location /static { 
     autoindex on; 
     root /static; 
    } 
} 

以上是從nginx.conf的提取物。現在,無論我設置爲root,nginx在嘗試訪問http://127.0.0.1/static/時都會拋出404未找到的錯誤。

文件結構如下:

/home/user/site/project 
/home/user/site/static 
/home/user/site/templates 

Django的settings.py具有以下設置爲STATIC_ROOT和STATIC_URL

STATIC_ROOT = "/home/user/site/static/" 
STATIC_URL = "http://127.0.0.1/static/" 

如果任何人都可以在正確的方向指向我們在哪裏這樣做,這將是太棒了。

回答

1

根據Jim的回答,找到了解決辦法。

root /static 

現已改爲:

root /home/user/site/static 

然而然後檢查它似乎是路徑的nginx試圖找到位於http://127.0.0.1/static爲/ home/user中/網站/靜態/靜態/日誌這顯然是不正確的。

我不確定這是否是正確的方法,但我現在將所有靜態文件指向根目錄(刪除/靜態在URL中的需要。因此對於/靜態/圖像我現在只需指向它http://127.0.0.1/images/

3
root /static 

是不是應該這樣/home/user/site/static呢?

+0

你會這麼認爲吉姆,但不管我有什麼,因爲它沒有奏效。 –

+0

日誌文件說什麼?該目錄及其父目錄的權限是什麼?什麼用戶是'nginx'運行的? – Jim

+0

靜態目錄是0755我已經將root/static重新更改爲/ home/user/site/static並且仍然沒有快樂。 –

0

退房的root指令的文檔,而相比之下,Apache的別名指令,位置匹配不掉線。所以,當你指定位置static你定義爲你的根必須包含static文件夾。因此,這不是錯誤,nginx正在尋找/home/user/site/static/static這是故意的行爲。

我甚至會更喜歡使用http://host/static/images作爲您提供靜態圖片的網址。這樣,它遵循Django文檔Managing static files,它建議爲您使用靜態文件的前綴。否則,你有多個文件夾用於混淆項目和應用程序文件夾的不同靜態內容。

1

檢查使用「root」或「alias」之間的差異。 基本上在使用'root'的情況下,'location'(/ static /)旁邊的路徑會被追加到路徑中,而'alias'則會被忽略。