2012-09-14 3 views
34

역방향 프록시로 nginx를 사용하고 업스트림 서버 (Apache)의 응답에서 사용자 정의 헤더를 읽으려고합니다.nginx - 업스트림 서버에서 사용자 정의 헤더 읽기

HTTP/1.0 200 OK 
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu) 
X-Powered-By: PHP/5.3.5-1ubuntu7.10 
Connection: close 
Content-Type: application/json; charset=UTF-8 
My-custom-header: 1 

내가 내-사용자 정의 헤더에서 값을 읽고 그것을 사용하려는 경우 절에 :

location/{ 
    // ... 
    // get My-custom-header value here 
    // ... 
} 

이 가능 아파치 응답은 다음과 같다? 미리 감사드립니다.

답변

38

$ HTTP _ 의 nginx에서

name_of_the_header 임의의 요청 헤더 필드를 지원하지 않습니다. 귀하의 예를 들어 http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_

변수가 $http_my_custom_header을 것 : 여기

참조 문서 위의 예에서 변수 이름의 마지막 부분은 밑줄로 대체 대시 소문자로 변환 된 필드 이름입니다.

+2

사실, 그게 잘못되어 답을 표시해서는 안됩니다. 앞으로이 문제를 겪는 사람에게 올바른 변수는'$ http_'입니다. OP를 예로 들자면,'$ http_my_custom_header' (대소 문자를 구별합니다!) – jduncanator

+0

문서와 일치시키기 위해이 답변을 수정했습니다;) –

+6

이것은 밝혀지지 않았습니다. OP는 응답 헤더의 값을 읽도록 요청했습니다. '$ sent_http_my_custom_header'를 사용해야합니다. http://nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_ – Nathan

3

사용 $ http_MY_CUSTOM_HEADER는

당신은

set my_header $http_MY_CUSTOM_HEADER; 
if($my_header != 'some-value') { 
#do some thing; 
} 
+0

사람이 말합니다 - 변수 이름의 마지막 부분은 밑줄로 대시가있는 __lower case__로 변환 된 필드 이름입니다. –

23

저도 같은 문제에 직면 것처럼 일부-일을 작성할 수 있습니다. 나는 $http_my_custom_header$sent_http_my_custom_header을 시도했지만 저에게는 효과가 없었습니다.

비록이 문제가 $upstream_http_my_custom_header을 사용하여 해결되었습니다.

+0

이것은 nginx 1.10.1에서 작동합니다. – chhantyal

관련 문제