nginx Proxy_pass 업스트림은 변수로 대체됩니다.

nginx Proxy_pass 업스트림은 변수로 대체됩니다.

내 업스트림:

upstream upstream_**uba1**_console_f485c00e45256742e2cc641db834b150 {
    ip_hash;
    server 192.30.56.172:39443;
    check interval=2000 rise=1 fall=3 timeout=3000;
}

upstream upstream_**uba2**_console_f485c00e45256742e2cc641db834b150 {
    ip_hash;
    server 192.30.56.173:39443;
    check interval=2000 rise=1 fall=3 timeout=3000;
}

내 위치:

location  /opsuba/ {
    if ($args ~* region=(\w+?)(&|$)) {
       set $region $1;
    }
    limit_req zone=reqconsole burst=10000 nodelay;
    limit_conn connconsole 1000;
    **proxy_pass https://upstream_${region}_console_f485c00e45256742e2cc641db834b150;**
    include error_page_exclude_ajax.conf;
    include static_file.conf;
    access_log off;
}

upstream_${region}_console_f485c00e45256742e2cc641db834b150변수로 대체 하려면 어떻게 해야 하나요 ?

답변1

$1(regexp에서) 또는 명령 $region에서 와 같은 변수를 지정합니다 set.
이는 구성에서 작동합니다.

proxy_pass http://upstream_$region_console_f485c00e45256742e2cc641db834b150;

방금 다음 예제 구성으로 테스트했습니다.

upstream upstream_uba1_console_f485c00e45256742e2cc641db834b150 { ip_hash; server 127.0.0.1:39443; }
upstream upstream_uba2_console_f485c00e45256742e2cc641db834b150 { ip_hash; server 127.0.0.1:39444; }

server {
    listen       80;
    location ~ ^/([^\/]*) {
        proxy_pass http://upstream_$1_console_f485c00e45256742e2cc641db834b150;
    }
}
server {
        listen 39443;
        root /var/www/;
        location / {
                try_files /url1.html $uri;
        }
}
server {
        listen 39444;
        root /var/www/;
        location / {
                try_files /url2.html $uri;
        }
}

파일 시스템의 파일:

/var/www/url1.html -> content url 1
/var/www/url2.html -> content url 2

다음을 통해 액세스:

http://localhost/uba1/ -> url1.html
http://localhost/uba2/ -> url2.html

나는 로컬 백엔드로 모든 작업을 수행했지만 귀하의 백엔드로도 작업할 것입니다. 또한 작동하도록 하려면 블록
에서 일부 매개변수를 제거해야 했습니다 .upstream

관련 정보