nginx에서 인코딩 승인 요청 헤더를 어떻게 제거할 수 있나요?

nginx에서 인코딩 승인 요청 헤더를 어떻게 제거할 수 있나요?

다음으로 인해 zlib에 대한 최근 업데이트가 이루어졌습니다.보안 구멍Ubuntu Focal에서 nginx를 통해 PHP-FPM 8.0을 제공할 때 큰 문제를 일으키는 것으로 보입니다. gzip 인코딩을 사용한 요청은 응답 시작 시 바로 실패하지만 nginx는 요청을 성공한 것으로 기록하고 크기가 정확합니다. 헤더 없이 요청하면 Accept-Encoding완벽하게 작동합니다. 해결 방법으로 모든 gzip 지원을 비활성화하려고 시도하고 있지만 매우 지속되는 것 같습니다... 지금까지 nginx에서 다음 설정을 시도했습니다.

gzip off;
fastcgi_buffering off;
add_header Accept-Encoding "";
proxy_set_header Accept-Encoding "";

또한 출력을 잡아서 다시 켜는 다른 지시문이 없는지 확인했습니다 nginx -T.

그러나 PHP에서 요청 헤더를 덤프하면(즉, nginx를 거친 후) 다음 승인 헤더가 계속 표시됩니다.

Accept-Encoding: deflate, gzip, br, zstd

그래서 nginx는~ 아니다PHP-FPM으로 전달되기 전에 요청에서 제거합니다. 서버 및 위치 수준에서 이러한 지시문을 설정해 보았지만 결과는 동일했습니다.

PHP에서는 모든 출력 버퍼링을 비활성화했지만 재컴파일 없이는 zlib를 비활성화할 수 없는 것 같습니다.

nginx나 PHP가 응답을 압축하지 않도록 nginx가 이 요청 헤더를 제거하도록 하려면 어떻게 해야 합니까?

답변1

proxy_set_header지시어는프록시요청, 즉 전달을 위한 요청HTTP-HTTP-서버 체인. 그리고 당신은빠른CGI서버는 체인의 다음 항목이므로 지시어 세트는 fastcgi_.

off로 설정하여 요청 헤더를 PHP로 전달하는 것을 완전히 비활성화하거나 fastcgi_pass_request_headers로 재설정하여 특정 헤더를 삭제할 수 있습니다 fastcgi_set_header.

답변2

fastcgi의 경우 약간 다른 구문을 사용합니다. 헤더를 설정하는 대신 헤더에 해당하는 매개변수를 설정합니다. 매개변수 이름은 "HTTP_"로 시작하고 헤더 이름은 대문자로 시작됩니다. 매개변수 이름에서 대시는 밑줄로 대체됩니다.

fastcgi_param HTTP_ACCEPT_ENCODING "";

관련 정보