Foreword
add_header는 헤더 모듈에 정의된 명령으로, 이름에서 알 수 있듯이 http 응답 헤더를 추가하는 데 사용됩니다. 하지만 이는 단지 "추가"일 뿐, 다시 작성하는 것이 아니라는 점에 유의하세요. 따라서 헤더가 이미 존재하는 경우 add_header를 사용하면 문제가 발생합니다. 게다가 낮은 버전의 nginx에서는 add_header가 오류 페이지에서의 사용을 지원하지 않습니다.
이것은 함정이 많은 지침입니다. 처리 단계가 위치 처리보다 늦습니다. 위치에 쓸 수는 있지만 다른 위치에 다시 쓸 경우 이전 위치에서 처리되지 않은 add_header는 손실됩니다. 예:
location = /a { add_header a 1; rewrite / /b; } location = /b { add_header b 2; return 204; }
에는 헤더가 1개 없습니다. 그렇죠? 이것은 구덩이입니다!
또 다른 함정은 처음에 언급한 반복적인 문제입니다. 예를 들어 콘텐츠에 대해 content-type을 설정하고 싶은데 전역적으로 default_type이 설정되어 있기 때문에 반복됩니다.
default_type 'text/plain'; location = /a { add_header content-type application/json; return 200 '"ok"'; }
물론 이 위치에 대해 default_type을 비워 두거나 단순히 add_header를 사용하지 않고 이 위치에 대한 default_type을 직접 수정하는 등 많은 해결 방법이 있습니다.
마지막 큰 함정은 오류 페이지에 적용할 수 없다는 것입니다. 오류 페이지에도 명확하게 정의되어 있습니다. 예를 들면 다음과 같습니다.
location = /a { add_header content-type application/json; return 404 '"not found"'; }
json으로 응답하고 싶지만 상태 코드가 404이므로 여기의 add_header가 적용되지 않습니다.
이 예제에서는 default_type을 사용하여 문제를 해결할 수 있지만, 다른 헤더라면 어떨까요? 예를 들어, access-control-allow-origin으로 무엇을 해야 합니까? 그렇다면 Lua나 다른 타사 모듈을 사용하여 문제를 해결하는 것 외에는 해결책이 없습니다. 물론 nginx도 이 문제를 인지하고 있어서 버전 1.7.5 이후에는 Always라는 매개변수를 지원한다고 문서에도 나와 있습니다. nginx는 이 문제를 자체적으로 해결했지만 1.6.2 기반의 tengine은 실패할 위기에 처해 있다.
위 내용은 nginx 구성 add_header의 함정을 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!