실험 환경
Nginx 1.15.8 (sb-nginx debian package) 백 엔 드 는 Cloudflare (즉, 압축 되 지 않 은 데이터 나 gzip br 압축 데 이 터 를 되 돌려 주 는 것 을 지원 합 니 다) 프 록 시 cache 를 설정 하고 cache key 를 $host $uri 로 설정 합 니 다.
과정 및 결과
Nginx 의 기본 동작
Chrome 에서 요청 을 보 냈 습 니 다. accept encoding 은 gzip, deflate, br Nginx 리 트 윗 소스, br 압축 데 이 터 를 되 돌려 주 고 헤더 vary accept encoding 을 추가 합 니 다.
Nginx 캐 시 br 데 이 터 를 압축 하고 vary header 를 존중 합 니 다. 이 캐 시 는 accept encoding header 만 설정 합 니 다. gzip, deflate, br 의 클 라 이언 트 가 사용 하지 않 으 면 다시 원본 으로 돌아 가 야 합 니 다 curl 에서 요청 을 보 내 고 압축 을 지원 하지 않 으 며 accept encoding 이 비어 있 습 니 다 Nginx 리 셋 curl - H accept header 를 gzip, br 이 header 성명 은 br 를 지원 하지만 캐 시 gzip, deflate, br 와 다 르 고 원본 으로 돌아 갑 니 다 이상 gzip 동 리 최적화 방안 1. 원본 을 압축 하지 않 고 캐 시 에 압축 되 지 않 은 파일 입 니 다. 요청 시 Nginx 에서 필요 에 따라 gzip 또는 br 압축 을 진행 합 니 다.
설정 을 통 해 proxy_set_header Accept-Encoding ""; 클 라 이언 트 accept encoding 을 덮어 서 원본 으로 돌아 갈 때 백 엔 드 를 압축 되 지 않 은 파일 로 되 돌려 줍 니 다.배치 하 다. proxy_ignore_headers Vary; vary 헤더 무시 설정 brotli on; gzip on; gzip_vary on; nginx 단 압축 사용 하기 Chrome 은 br 압축 을 지원 해 달라 고 요청 하 였 으 며, 첫 번 째 원본 으로 돌아 가 br 압축 후 데이터 를 되 돌려 주 었 습 니 다.
curl 요청 은 압축 을 지원 하지 않 습 니 다. 캐 시 에서 압축 되 지 않 은 파일 을 가 져 와 되 돌려 줍 니 다 curl 요청 accept encoding 을 gzip 으로 설정 하고 캐 시 에서 압축 되 지 않 은 파일 을 가 져 와 gzip 압축 후 파일 을 되 돌려 줍 니 다.
최적화 방안 2. 리 소스 는 모두 gzip 압축 을 받 아들 이 고 캐 시 gzip 압축 후 파일 입 니 다. 요청 시 필요 에 따라 gzip 압축 을 풀 수 있 습 니 다.
(단점 은 br 를 지원 하지 않 는 다 는 것 이다. nginx 는 현재 gunzip 와 같은 압축 해제 br 모듈 이 없 기 때문이다.)
설정 을 통 해 proxy_set_header Accept-Encoding "gzip"; 클 라 이언 트 accept encoding 을 덮어 서 원본 으로 돌아 갈 때 백 엔 드 를 gzip 압축 파일 로 되 돌려 줍 니 다.배치 하 다. proxy_ignore_headers Vary; vary 헤더 무시 설정 gzip off; brotli off; gzip_vary off;, 설정 gunzip on; 수요 에 따라 압력 을 풀다. Chrome 은 gzip 압축 지원 을 요청 합 니 다. 첫 번 째 원본 으로 돌아 가 백 엔 드 서버 (내 nginx 가 아 닌) gzip 압축 후 데 이 터 를 캐 시 합 니 다 curl 요청 은 압축 을 지원 하지 않 습 니 다. 캐 시 에서 gzip 압축 을 가 져 온 후 파일 을 압축 해제 하고 되 돌려 줍 니 다 잘 쓰 여 있 지 않 습 니 다. 방금 만들어 진 것 이기 때문에 친구 들 의 질문 을 해결 할 수 있 을 것 입 니 다. 문제 가 있 으 면 계속 아래 에 보 낼 수 있 습 니 다.