nginx 와 squid 2.5 의 gzip 압축 문제

3049 단어 nginx
nginx 와 squid 2.5 의 gzip 압축 문제
최근 에 이상 한 문 제 를 발 견 했 습 니 다. nginx 가 백 엔 드 에 있 고 squid 가 프론트 에 있 는 구조 에 대해 squid 가 출력 한 페이지 는 압축 한 적 이 없습니다.hosts 를 nginx 기계 에 가 리 켰 을 때 페이지 가 확실히 압축 된 것 을 발견 했다.나중에 인터넷 에서 오랫동안 자 료 를 찾 아 봤 는데 squid 가 http 1.1 을 잘 지원 하지 못 하기 때문에 압축 된 페이지 는 이 를 통 해 압축 되 지 않 는 다 고 합 니 다.또 이틀 이 지나 동료 에 게 이 이 야 기 를 꺼 냈 을 때 그 는 apache 2 의 deflate 모듈 이 열 렸 을 때 squid 출력 을 통 해 압축 되 었 다 고 일 깨 워 주 었 다.그래서 다시 문 제 를 찾 아야 합 니 다. 그 중에서 문제 의 초점 은 http 1.1 과 1.0 에 있 습 니 다.apache 출력 헤드 와 nginx 출력 헤드 를 비교 해 보 겠 습 니 다. 그리고 하나씩 nginx 에서 addheader 와 proxyhide_header, 몇 시간 걸 렸 습 니 다. 마지막 까지 디 버 깅 을 했 습 니 다. 문 제 는 여전 합 니 다.그리고 문 제 는 제 가 머리 를 추출 할 때 IE 브 라 우 저 를 사 용 했 기 때문에 http 1.1 요청 을 보 냈 습 니 다. 결 과 는 squid 가 백 엔 드 에 접근 한 결과 와 일치 하지 않 습 니 다.그래서 나 는 또 기 계 를 찾 아 curl - 0 으로 디 버 깅 을 했다.이번 디 버 깅 에서 마침내 문 제 를 발견 했다.
클립보드 로 내용 복사
코드:curl --header "Accept-Encoding: gzip, deflate" -D x -0 http://apache
위의 명령 출력 결 과 는 어 지 러 운 코드 로 압축 되 었 음 을 증명 합 니 다.
클립보드 로 내용 복사
코드:curl --header "Accept-Encoding: gzip, deflate" -D x -0 http://nginx
위의 명령 출력 결 과 는 명시 적 입 니 다. 압축 되 지 않 았 음 을 증명 하고 드디어 차 이 를 발 견 했 습 니 다!!!하지만:
클립보드 로 내용 복사
코드:curl --header "Accept-Encoding: gzip, deflate" -D x http://nginx
위의 명령 이 실 행 된 후에 nginx 도 압축 결 과 를 되 돌 릴 수 있 습 니 다. 이러한 현상 을 통 해 알 수 있 듯 이 squid 는 http 1.0 을 사용 하여 뒤로 데 이 터 를 가 져 왔 습 니 다. apache 는 http 1.0 의 압축 을 지원 할 수 있 습 니까?http 1.0 에 압축 이 없 는 것 같 습 니 다.그래서 자 료 를 찾 아 보 니 http 1.0 은 확실히 압축 할 수 있 는 것 이 었 다.그러면 nginx 는 1.0 의 압축 을 지원 하지 않 습 니까?nginx. net 에 가서 알 아 봐.gzip 찾기module 에서 완전한 설정 문 구 를 찾 았 습 니 다: gziphttp_version syntax: gzip_http_version 1.0|1.1 default: gzip_http_version 1.1 context: http, server, location Turns gzip compression on or off depending on the HTTP request version. When HTTP version 1.0 is used, the Vary: Accept-Encoding header is not set. As this can lead to proxy cache corruption, consider adding it with add_header. Also note that the Content - Length header is not set when using either version. Keepalives will therefore be impossible with version 1.0, while for 1.1 it is handled by chunked transfers. nginx. conf 에 추가 하면 좋 습 니 다. 이때 squid 는 압축 된 내용 을 되 돌 릴 수 있 습 니 다.며칠 동안 골 치 아 팠 던 문제 가 마침내 해결 되 었 다.
클립보드 로 내용 복사
코드:
nginx.conf gzip ,“gzip_http_version 1.1;” “gzip_http_version 1.0;”, “gzip_vary on;”, Nginx Squid 2.5/2.6 gzip 。

달리 zlib 1.2.3 설치: gzipvary 는 on 으로 설정 해 야 합 니 다. 시스템 은 / usr / lib / zlib. a 가 필요 합 니 다.. /configure -- shared -- prefix = / usr. / configure -- prefix = / usr 컴 파일 두 번 모두 설치 합 니 다.nginx 0.7.3 버 전 이하 추가: addheader Vary Accept-Encoding; nginx 에 vary 를 보 내 도록 강제 합 니 다. 그렇지 않 으 면 squid 는 비 압축 버 전 을 받 은 후에 nginx 가 압축 을 지원 하지 않 는 다 고 생각 한 다음 에 캐 시 된 비 압축 버 전 을 지속 적 으로 업데이트 하지 않 습 니 다. 그러면 특정한 링크 가 장기 적 으로 비 압축 버 전 으로 돌아 가 는 상황 이 이상 하 게 나타 납 니 다. 보통 첫 페이지 입 니 다.nginx 0.7.3 이하 버 전 에 Vary 를 강제 적용 하면 캐 시가 몇 초 만 에 만 료 되 는 기괴 한 현상 이 나타 나 기 때문에 0.7.3 이상 버 전 만 사용 해 야 문 제 를 해결 할 수 있다.

좋은 웹페이지 즐겨찾기