nginx : 왜 proxy_set_header를 if 절 안에 넣을 수 없습니까?


9

이 구성으로 :

server {
    listen 8080;
    location / {
        if ($http_cookie ~* "mycookie") {
            proxy_set_header X-Request $request;
            proxy_pass http://localhost:8081;
        }
    }
}

nginx 서비스를 다시로드 할 때이 오류가 있습니다.

Reloading nginx configuration: nginx: [emerg] "proxy_set_header" directive is not allowed here in /etc/nginx/conf.d/check_cookie.conf:5
nginx: configuration file /etc/nginx/nginx.conf test failed

이 구성은 정상적으로 작동하지만 원하는 것을 수행하지 않습니다.

server {
    listen 8080;
    location / {
        proxy_set_header X-Request $request;
        if ($http_cookie ~* "mycookie") {
            proxy_pass http://localhost:8081;
        }
    }
}

proxy_set_header 지시문을 if 절 안에 넣을 수없는 이유는 무엇 입니까?


교차 게시하지 마십시오. stackoverflow.com/questions/16500594/…
ceejayoz

이에 대해 토론하기 위해 대화를 열었습니다. 우리는 그곳에서 토론을 계속할 수 있습니다 : chat.stackexchange.com/rooms/8745/nginx
Neuquino

답변:


10

실제로 '어떻게 작동시킬 수 있습니까?'라고 묻는다고 가정하면 헤더를 항상 전달하지만 헤더를 항상 원하지 않는 경우 무시 된 값으로 설정하십시오.

server {
    listen 8080;    
    location / {
        set $xheader "someignoredvalue";

        if ($http_cookie ~* "mycookie") {
            set $xheader $request;
        }

        proxy_set_header X-Request $xheader;

        if ($http_cookie ~* "mycookie") {
            proxy_pass http://localhost:8081;
        }
    }

당신은 ""그렇습니까?
마이클 햄턴

2
나는 개인적으로이 해킹이 제자리에 있다는 사실을 잊어 버린 다음 왜 헤더가 비어 있는지 궁금해하기보다는 실제 가치가 아닌 것으로 설정하는 것을 선호합니다. "ng-x로 설정하지 않은 X- 헤더"로 설정하면 혼동되지 않습니다.
Danack

이 문서에 따르면 nginx.com/resources/wiki/start/topics/depth/ifisevil를 . 위치 컨텍스트에서 내부에서 수행 할 수있는 유일한 100 % 안전한 작업은 반환 및 재 작성입니다. 블록이 항상 작동한다면 proxy_pass가 의심됩니다.
Chau Chee Yang

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.