2014-06-17 81 views
2

我使用Nginx作爲http負載均衡器,用於使用遠程TCP連接的多個上游後端Rails服務器。它們都託管相同的應用程序,並使用位於public/assets目錄下的相同靜態預編譯資源。使用Nginx從遠程rails上游服務器提供靜態資產

現在我遇到了使用Rails資產管道文檔頁面here上提供的建議nginx配置爲這些遠程連接提供靜態資產的問題。

upstream backend { 
     ip_hash; 
     server upstream1.example.com:8080; 
} 

server { 
     client_max_body_size 100M; 
     listen 80; 
     server_name "example.com"; 

     location/{ 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_set_header Host $http_host; 
       proxy_redirect off; 

       if (!-f $request_filename) { 
         proxy_pass http://backend; 
         break; 
       } 
     } 
     location ~ ^/assets/ { 
     expires 1y; 
     add_header Cache-Control public; 

     add_header ETag ""; 
     break; 
     } 

} 

設置了上述配置,導航到瀏覽器的資產manaully,如`example.com/assets/image-1ae4dda6436928deeb4bc903fd421572.jpg」似乎導致Nginx的嘗​​試,並從負載加載文件平衡服務器,而不是遠程服務器,這裏是從我的錯誤日誌輸出:

2014年6月17日12點55分27秒[錯誤] 5953#0:* 1 open()的 「的/ etc/nginx的/html/assets/image-1ae4dda6436928deeb4bc903fd421572.jpg「 失敗(2:無此文件或目錄),客戶端:205.200.252.55,服務器: example.com,請求:」GET /assets/image-1ae4dda6436928deeb4bc903fd421572.jpg HTTP/1.1" ,主機: 「example.com」

任何變通辦法?我計劃使用cloudfront來提供我所有的靜態資產,但我非常確定我需要一箇中央服務器來從最初提供所有文件,以便使其工作並避免瀏覽器上的跨域字體問題Firefox和IE。

+0

在你的資產的位置,您有任何關於上游。 –

+0

@AlexeyTen我將如何去添加?像'root後端;'可能嗎? – Noz

回答

0

我假定你們每個應用程序實例(上游)也使用nginx作爲代理。

你應該把這個在nginx的負責每次應用實例(上游)的不是在nginx的配置爲負載平衡器

location ~ ^/assets/ { 
    expires 1y; 
    add_header Cache-Control public; 

    add_header ETag ""; 
    break; 
    } 
相關問題