Nginx

Nginx 配置 - 在某些路徑上記憶體標頭

  • January 22, 2012

根據我對 nginx 文件的理解,位置不能嵌套(或者更確切地說,如果它們是不可繼承的效果)並且proxy_pass不能屬於該server {}級別。所以我現在的配置是這樣的,我知道我可以通過使用文件路徑來緩解一些問題,但是讓我們假設我在使用proxy_pass. 大概有一種更好的方法可以在沒有重複的情況下編寫它:

server {
 listen  80;
 server_name salessystem.acmecorp.com;

 location /extjs/ {
   ## proxy_buffers 128 256k;
   proxy_pass http://localhost:5400/;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
   expires max;
   gzip  on;
   gzip_http_version 1.1;
   gzip_vary on;
   gzip_comp_level 7;
   gzip_proxied any;
   gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
   access_log off;
   break;
 }

 location / {
   ## proxy_buffers 128 256k;
   proxy_pass http://localhost:5400/;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
   expires epoch;
   gzip  on;
   gzip_http_version 1.1;
   gzip_vary on;
   gzip_comp_level 7;
   gzip_proxied any;
   gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
   access_log off;
   break;
 }
}

我認為您的 nginx 配置如下:

  • 因為它只是針對您的兩個不同位置的 expires 標頭,儘管兩者都將代理與同一伺服器匹配。
  • 嘗試將兩個位置都放在一個塊中
  • 基於查詢字元串,(或位置匹配字元串)設置不同的過期標頭

標籤。

server {
 listen  80;
 server_name salessystem.acmecorp.com;

 location ~* (/extjs/|/) {
   ## proxy_buffers 128 256k;
   proxy_pass http://localhost:5400/;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
   expires max;
     if ($query_string ~ \/extjs\/) {
     expires epoch;
     }
   gzip  on;
   gzip_http_version 1.1;
   gzip_vary on;
   gzip_comp_level 7;
   gzip_proxied any;
   gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
   access_log off;
   break;
 }

}

但是請根據您的需要進行測試,尤其是在正則表達式匹配locationquery_string值匹配附近。

但是不清楚,為什麼 extjs要從代理伺服器(似乎是動態應用程序伺服器)中獲得服務,因為如果我的假設是正確的,它們只是純文字文件。與請求相關的請求extjs無需通過代理或應用程序邏輯系統以防萬一,而它們可以通過文件系統獨立提供服務。我想把它保存在它自己的單獨位置,並在它自己的位置塊中擁有獨特的 gzip/expires 指令,而其他常見指令可以保存在伺服器塊本身中。

例如:

server {
  ...
  common gzip directives
  common header setters
  common expires setters
  ...
  location / {
    proxy to backend app server
    settings unique to / location
    ..
  }
  location /extjs {
    settings unique to /extjs location
    expires header reset
    ...
  }
}

引用自:https://unix.stackexchange.com/questions/29688