Nginx

Rails - Nginx 不記憶體圖像

  • October 1, 2014

我有一個 VPS,我正在使用 Nginx 和 Unicorn 執行我的 Rails 應用程序。我成功地將過期標頭添加到 JS 和 CSS 文件,但是我不能強制 Nginx 也記憶體圖像(根據 YSlow 和 Google PageSpeed Insights)。

這是我的伺服器塊:

server {
 listen   80;
 root /home/rails/public;
 server_name _;
 index index.htm index.html;

 location / {
   try_files $uri/index.html $uri.html $uri @app;
 }

 location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
   try_files $uri @app;
 }

 location @app {
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $http_host;
   proxy_redirect off;
   proxy_pass http://app_server;
 }

 location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
   expires max;
 }

}

最後一段程式碼是我如何實現 CSS 和 JS 的 chaching,但它不適用於圖像。我究竟做錯了什麼?我應該在其他地方做一些額外的改變嗎?

非常感謝!

您有兩個匹配圖像的位置塊:

location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
   try_files $uri @app;
}

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
   expires max;
}

Nginx 將在第一個匹配的正則表達式位置塊處停止,因此第二個位置塊永遠不會用於jpg、jpeg、png、gif 和 ico 文件。

更新:回退記憶體的詳細資訊

server {
 listen   80;
 root /home/rails/public;
 server_name _;
 index index.htm index.html;

 location / {
   try_files $uri/index.html $uri.html $uri @app;
 }

 location ~* ^.+\.(jpg|jpeg|png|gif|ico|css|js)$ {
   expires max;
   try_files $uri @app;
 }

 location ~* ^.+\.(zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
   try_files $uri @app;
 }

 location @app {
   if ($uri ~* ^.+\.(jpg|jpeg|png|gif|ico|css|js)$) {
       expires max;
   }
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $http_host;
   proxy_redirect off;
   proxy_pass http://app_server;
 }

}

引用自:https://serverfault.com/questions/632666