Nginx
Nginx 配置 - 在某些路徑上記憶體標頭
根據我對 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; } }
但是請根據您的需要進行測試,尤其是在正則表達式匹配
location
和query_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 ... } }