我有一種情況,我想將 proxy_pass 傳遞給后端服務器,服務器的 url 是動態的,并且來自 url 引數值或標頭引數值。不確定這是否可行,對于 NGINX 代理來說還是個新手。
我曾認為 $arg_name 是在 NGINX 中獲取查詢字串引數值的通用方法,所以如果我有一個類似 ....?proxy=/proxy1 的 URL,那么 $arg_proxy 的值應該是 "/proxy1 “?
我的目標是這樣的:
set $proxy "http:/${arg_proxy}:8042";
location /backend/ {
proxy_pass $proxy;
rewrite /backend(.*) $1 break;
proxy_set_header Host $http_host;
proxy_request_buffering off;
proxy_max_temp_file_size 0;
client_max_body_size 0;
}
我試過了,還有其他一些設定變數的變體。它不會使服務器崩潰,但它也表現得像 $arg_proxy 的值是空白的,即使它不是,或者沒有被讀取。
invalid URL prefix in "http:/:8042"
最好從標頭引數中提取代理值,因為在某些情況下這也是有用的。
附錄:
我使用 Cookie 嘗試過這樣的事情:
map $cookie_TEST $proxy_url {
volatile;
default "";
"pacs-1" "pacs-1";
"pacs-2" "pacs-2";
"pacs-3" "pacs-3";
}
upstream pacs-1 {
server pacs-1:8042;
keepalive 32;
keepalive_requests 1024;
keepalive_time 1h;
keepalive_timeout 600s;
}
upstream pacs-2 {
server pacs-2:8042;
keepalive 32;
keepalive_requests 1024;
keepalive_time 1h;
keepalive_timeout 600s;
}
upstream pacs-3 {
server pacs-3:8042;
keepalive 32;
keepalive_requests 1024;
keepalive_time 1h;
keepalive_timeout 600s;
}
但是然后在代理塊中:
if ($proxy_url = 'pacs-1') {
rewrite /orthanc(.*) $1 break;
proxy_pass http://pacs-1;
}
if ($proxy_url = 'pacs-2') {
rewrite /orthanc(.*) $1 break;
proxy_pass http://pacs-2;
}
if ($proxy_url = 'pacs-3') {
rewrite /orthanc(.*) $1 break;
proxy_pass http://pacs-3;
}
似乎應該有一種不使用 if 的方法,這確實是一個壞主意,但到目前為止,它似乎對我正在嘗試的東西“有效”。
uj5u.com熱心網友回復:
Args 是特定于 uri 的,請嘗試使用以下示例:
location /search {
set $proxxy "www.google.com";
if ($args) {
set $proxxy $arg_proxy;
}
if ($proxxy){
proxy_pass https://$proxxy;
}
proxy_pass https://www.google.com;
}
無法獨立于請求訪問訪問引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/525916.html
標籤:nginx代理人反向代理
