서버의 add_header 지시문을 덮어 쓰는 위치의 add_header 지시문


11

사용 의 nginx 1.2.1 내가 사용하여 여러 헤더를 추가 할 수 있어요 add_header로서 다음을 :

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        echo "Nginx localhost site";
    }
}

결과

GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2

그러나 add_headerinside 지시문을 사용하자마자 아래 location의 다른 add_header지시문 server은 무시됩니다.

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        add_header Name3 Value3;  <=== HERE
        add_header Name4 Value4;  <=== HERE
        echo "Nginx localhost site";
    }
}

결과

GET /
HTTP/1.1 200 OK
Name3: Value3
Name4: Value4

문서는 모두 말한다 serverlocation유효 context하고 사용하여 해당 상태하지 않는 add_header한 방지에 다른에서 사용합니다.

Q1 : 이것이 버그인지 아니면 의도 된 동작인지, 왜 그런지 알고 있습니까?

Q2 : HttpHeadersMoreModule모듈을 사용하는 것보다이 문제를 해결하는 다른 옵션이 있습니까?

답변:


18

이것은 예상되는 동작입니다. add_header더이없는 경우만의 nginx에있는 다른 모든 배열 형 지시어와 같은 많은 지침은 이전 수준에서 상속 add_header현재 수준에서 정의 지시어.

당신은 모든 헤더를 추가하는 nginx를 원하는 경우 location /, 당신은 목록에 그들 모두에게있다 location /, 즉,

location / {
    add_header Name1 Value1;
    add_header Name2 Value2;
    add_header Name3 Value3;
    add_header Name4 Value4;
    return 200 "";
}

한 곳에서 많은 양의 헤더를 나열하는 방법이 필요한 경우이를 위해 include지시문을 사용할 수 있습니다 . 여기에서 문서를 참조 하십시오 .


지시문 add_header안에 만 location있지만 여전히이 헤더가 추가되지 않습니다. 아이디어?
Aditya MP

@adityamenon 하나만 add_header있습니까? 그렇다면 응답 코드가 문서의 코드인지 확인하십시오 ( nginx.org/r/add_header 참조) .
Maxim Dounin

안녕 맥심, 나는 몇 가지 문제가 있었다, 나는 마침내 설정이 그 작품 : stackoverflow.com/a/19135714/443219
아 디트 MP

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