YJWANG

Nginx reverse proxy regexp 및 arguments 분기 본문

00.OS

Nginx reverse proxy regexp 및 arguments 분기

왕영주 2020. 12. 8. 09:51

Nginx proxy 설정

Nginx 에서 reverse proxy 등으로 요청 분기 시 기본적으로 GET요청 시 같이 보내는 argument가 보내지지 않는다.
하여 아래와 같이 설정하면 is_args로 인해 ? 문자가 매핑되고 $args로 인해 뒤 arguments가 전달되게 된다.

sample configuration

location ~ ^/(pattern1|pattern2)($|/.*) {
        proxy_pass http://test.server.com/$1$2$is_args$args;
 }

Upstream Sample

upstream backend {  
    server 10.95.90.20:30080 fail_timeout=5s;  
    server 10.95.90.21:30080 fail_timeout=5s; 
}

server {  
           listen 8088;

 location /test1 {  
 proxy_pass http://backend/test1;  
 }  

 location /test2 {  
 proxy_pass http://backend/test2;  
 }  

 error_page 404 /404.html;  
 location = /40x.html {  
 }  

 error_page 500 502 503 504 /50x.html;  
 location = /50x.html {  
 }  
}

if 분기
header 와 hosts도 같이 넘어가도록 설정
아래와 같이 하면 parameter도 같이 넘어감

     location ~ ^/(a|b|c)($|/.*) {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header Host $host;

        if ( $request_uri ~ "/api/(a|b)($|/.*)" ) {
                set $behindC $2;
                proxy_pass https://test.com/cc$behindC;
        }
        if ( $request_uri ~ "/(c)($|/.*)" ) {
                set $behindD $2;
                proxy_pass https://test,com/dd$behindD;
        }
    }

rewrite 분기
요청 url rewrite하여 분기

   location ~ ^/(gg/01) {
        rewrite "(?i)/gg/01(/|$)(.*)" /hh/01$1$2 break;
        proxy_pass  http://test.com;
    }
반응형