我使用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。
在你的資產的位置,您有任何關於上游。 –
@AlexeyTen我將如何去添加?像'root後端;'可能嗎? – Noz