所以,這是我的情況。我有一個網站有一些自定義邏輯來自一個單獨的上游應用程序。我現在有這個工作沒有問題,儘管我的直接解決方案有點冗長。我將很快添加更多這些自定義位置,並添加以大寫和小寫方式訪問這些位置的功能。我的解決方案將起作用,但地點列表很快就會變得笨拙,我想重新考慮我的解決方案。Nginx規則的大小寫位置
因此,我們假設我的上游文件被稱爲「myupstream」,並已在文件中定義。我的自定義位置將是一,二,三和四。 (真實位置名稱因其自身保護而更改)。
所以這些URL:
http://mysite/one http://mysite/two http://mysite/three http://mysite/four
在我的nginx.conf:
location /one {
log_request_speed_filter on;
log_request_speed_filter_timeout 1000;
proxy_pass http://myupstream/one;
proxy_set_header Host $http_host;
}
location /two {
log_request_speed_filter on;
log_request_speed_filter_timeout 1000;
proxy_pass http://myupstream/two;
proxy_set_header Host $http_host;
}
…
etc.
所有的位置是除了位置的名稱相同。
現在,位置的數量是現在的幾個,但可能會增長到幾十個。然後,添加以大寫和小寫訪問位置的功能。所以:
http://mysite/one http://mysite/ONE http://mysite/two http://mysite/TWO 等等
如果我有20個地點,使用我目前的戰略我要創建我的nginx.conf裏面40點不同位置的塊。所以,我正在尋找一種更有活力的方式。有些事情是這樣的:
location /(one|two|three) {
log_request_speed_filter on;
log_request_speed_filter_timeout 1000;
proxy_pass http://myupstream/$1;
proxy_set_header Host $http_host;
}
當然,我希望它只適用於特定的條目,所以一個寬敞的規則是行不通的。另外,我也想檢測大寫字母,但在調用上游時,它需要小寫。例如:
location /ONE {
log_request_speed_filter on;
log_request_speed_filter_timeout 1000;
proxy_pass http://myupstream/one;
proxy_set_header Host $http_host;
}
所以問題1:
有沒有更好的方式nginx的做到這一點?怎麼樣?
問題2:
哪種方式更具資源/流程效率?
在此先感謝您。
在上面的例子中,如果有人調用http://example.com/FOUR,傳遞給上游的值是「四」還是「四」?我需要它是「四」。 –
@ R.Smith,我已經更新了答案 –
謝謝!這正是我所需要的。 –