2010-04-10 59 views
0

我試圖通過nginx的服務Django的靜態媒體,這是我的nginx.confnginx服務Django靜態媒體| 502網關

server { 
    listen  7777; 
    listen  localhost:7777; 
    server_name example.com; 

    location/{ 
     proxy_pass http://localhost:7777; 
     proxy_redirect off; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     client_max_body_size 10m; 
     client_body_buffer_size 128k; 
     proxy_connect_timeout 90; 
     proxy_send_timeout 90; 
     proxy_read_timeout 90; 
     proxy_buffer_size 4k; 
     proxy_buffers 4 32k; 
     proxy_busy_buffers_size 64k; 
     proxy_temp_file_write_size 64k; 
    } 

    location /test-app-media/ { 
     root /sites/mysite/staticmedia/; 
     expires max; 
     } 
} 

,但給一個502 bad gateway錯誤,路徑/sites/mysite/staticmedia/是nginx的根目錄/是問題。 。


的Django在Apache 2.2運行+ mod_wsgi的

nginx的0.7.65

謝謝..

回答

3

的更好的方式是在Apache的前面nginx的使用和服務靜態媒體:

如:nginx的:

server { 
    listen 80; 
    server_name media.example.com; 
    access_log /var/log/nginx/media.example.com.media.access.log; 
    location/{ 
     autoindex on; 
     index index.html; 
     root /var/www/media.example.com/media; 
    } 
} 

server { 
     listen 80; 
     server_name www.example.com; 
     access_log /var/log/nginx/www.example.com.django.access.log; 

    location/{ 
     proxy_pass http://wwwcluster; 
     include /etc/nginx/proxy.conf; 
    } 
} 

proxy.conf:

proxy_redirect    off; 
proxy_set_header   Host $host; 
proxy_set_header   X-Real-IP $remote_addr; 
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
client_max_body_size  10m; 
client_body_buffer_size  128k; 
proxy_connect_timeout  90; 
proxy_send_timeout   90; 
proxy_read_timeout   90; 
proxy_buffer_size   4k; 
proxy_buffers    4 32k; 
proxy_busy_buffers_size  64k; 
proxy_temp_file_write_size 64k; 

nginx的。 conf:

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    access_log /var/log/nginx/access.log; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 
    tcp_nodelay  on; 

    gzip on; 

    upstream wwwcluster { 
     server 127.0.0.1:8080; 
    } 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

並配置Apache爲127.0.0.1:8080上的您的網站

我有這個安裝在多個網站和它的運行完美。另一個好處是,你可以通過添加其他的Apache服務器到上游wwwcluster在nginx.conf

+0

嘿,我沒有看到任何名爲proxy.conf和nginx的文件,那麼我在哪裏放置這些配置? – Switch 2010-04-10 14:17:32

+1

有點晚了,但如果你是在Ubuntu上我把它放在conf.d文件夾中,'包括/etc/nginx/conf.d/* CONF;在nginx.conf'行尋找任何有。 conf extension,IE proxy.conf,因此你可能不需要在你的網站的nginx conf中包含'include /etc/nginx/proxy.conf'。 – TheLizardKing 2010-04-22 01:23:12

+0

哦,對@renton來說,這正是我所需要的,並且這些少量修改完美無瑕。我重定向到我的非生產版本的Django的開發服務器,它只是完美的。謝謝! – TheLizardKing 2010-04-22 01:31:16

0
502 bad gateway 

是因爲Apache有問題(不重新啓動,或者類似的東西)。你可以檢查Apache服務器日誌的信息。

問題是你的/sites/mysite/staticmedia/被傳遞給apache,而不是由nginx本身提供服務。

你的nginx的媒體部分必須是這樣的:

location /staticmedia/ { 
    root /sites/mysite/; 
    expires max; 
    autoindex on 
    } 

這將在文件系統訪問/sites/mysite/staticmedia/

也就是說,位置指定的位置路徑也被認爲是文件系統的一部分。 (我認爲這也不是好的方式;但這是nginx的做法。)

您可以保留autoindex,以便在調試過程中爲您提供幫助。

+0

我所做的更改,但仍然沒有工作,有時給人的502錯誤 – Switch 2010-04-10 10:56:41

1
server { 
    listen  7777; 
    listen  localhost:7777; 
    server_name example.com; 

    location/{ 
     proxy_pass http://localhost:7777; 
... 

nginx的偵聽端口7777和連接到位於端口7777的代理集羣/負載均衡您的應用程序很容易在同一主機上。難怪它會返回502錯誤。

1

如果第三方應用程序包含在您的項目中,那麼它應該安裝在您的服務器上,就像南方是第三方應用程序。 考慮南你的settings.py文件,然後南應該也安裝在你的服務器上。 如果該模塊考慮在這裏,已經安裝在服務器上,然後嘗試升級它。因爲您可能在本地計算機上使用模塊的升級版本,並且在服務器中安裝了舊版本。