我有,我需要做的proxy_pass變量的問題,但是,當我讓一個變量,它未能在後端服務器上正確解析Nginx的proxy_pass與斜線變量無法
nginx -v
nginx version: nginx/1.6.2
這是工作之一:
server {
listen 443 ssl;
ssl on;
server_name api.hostname.com;
include ssl_params;
location = /v1 {
return 302 /v1/;
}
location /v1/ {
proxy_pass http://internal-api.hostname.com.us-east-1.elb.amazonaws.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
這是一個已損壞一個
server {
listen 443 ssl;
ssl on;
server_name api.hostname.com;
include ssl_params;
location = /v1 {
return 302 /v1/;
}
location /v1/ {
resolver 10.0.0.2;
set $backend "http://internal-api.hostname.com.us-east-1.elb.amazonaws.com/";
proxy_pass $backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
後端結果FO在工作一個R https://api.hostname.com/v1/profile是:
<-- GET /profile
--> GET /profile 200 16ms 349b
但在打破一個
<-- GET/
--> GET/401 1ms 12b
我已經試過:
set $backend "internal-api.hostname.com.us-east-1.elb.amazonaws.com";
proxy_pass http://$backend/
set $backend "internal-api.hostname.com.us-east-1.elb.amazonaws.com/";
proxy_pass http://$backend/
任何時候,我使用的proxy_pass變量,它將所有內容轉發到後端的/(根),絕對不是我想要的。
*我需要使proxy_pass成爲一個變量* ...我正在研究這個,但我也很好奇它爲什麼需要變量。是不是因爲後端的IP地址發生變化,但nginx已經緩存了後端查找,並且沒有根據需要再次嘗試解析它? –
我懷疑使用一個變量會破壞uri的其他自動保存,所以也許在位置塊內部重寫^/v1(/.*)$ $ 1;'然後'proxy_pass $ backend $ uri;'可能會更接近你需要什麼(沒有在'$ backend'中存儲尾部斜線)。 –
使用變量的原因是,當aws後端的ip發生變化時,我將不會發生持續幾個小時的中斷,意識到需要重新啓動Web服務器。我試圖刪除在每次調用中使用正則表達式的需要。但這可能是一條路。我會先嚐試上游,然後我會嘗試你的建議。 –