사용자 정의 헤더를 다시 전달하는 nginx


13

나는 다음과 같은 예를 가지고있다

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

이제 다음 컬 라인을 사용할 때

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

이제는 작동하지 않습니다. 백엔드의 apache / php에 헤더가 표시되지 않습니다. nginx를 우회하면 작동합니다.

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test

답변:



2

proxy_set_header백엔드 서버로 전달하려는 모든 헤더에 사용해야 합니다. 따라서 proxy_pass_header ...줄 대신 :

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

나는 그것을 시도하고 헤더를 올바르게 설정하지 않습니다, 만약 $ http_x_custom_header를 "foo"로 바꾸면 작동합니다
Mike

왜 @Mike에서 작동하지 않는지 잘 모르겠지만 저에게 효과적이었습니다. $ http_x_forwarded_proto와 함께 X-Forwarded-Proto를 사용하고 있습니다.
Tyler Collier

2

위의 내용도 저에게 효과적이지 않아서 사용했습니다 proxy_pass_header. 참고 항목 여기 proxy_pass_header에 대한 Nginx에 위키를 .

사용자 정의 헤더가 프록시 블록에 device_id추가 된 경우proxy_pass_header device_id;

밑줄이있는 커스텀 헤더를 사용하는 경우 (예 : 나) underscores_in_headers onNginx 구성에 있는지 확인하십시오 .


고마워요! 나는 내 머리를 뽑고 있었다 .... 당신의 게시물은 나를 안심 ....
Fahad Ahammed

1

기본적으로 nginx는 모든 ( proxy_pass_request_headers on; ) 헤더를 백엔드 서버로 전달합니다. 그러나 요청 헤더 (사용자 정의 헤더 일 수 있음)가 헤더 이름에 밑줄 (_)을 포함하면 nginx는 해당 헤더를 차단합니다.

Ex: authenticate_type, cdn_enable.

Nginx가 모든 또는 사용자 정의 요청 헤더를 백엔드에 전달할 수있게하려면 밑줄 옵션을 켜십시오.

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