csv.wise.ai.kr vhost에 압축·정적 캐시 추가

메인 화면 하나가 woff 폰트만 3MB 넘게 끌어오는데 압축도 캐시 헤더도 없었다.
유선망에서는 티가 안 나지만(같은 폰트 0.15초) 테더링에서는 25초가 걸려
브라우저가 로딩을 끝내지 못하고 "접속 안 됨"처럼 보인다.

- mod_deflate: HTML 52,665B → 9,516B (82% 감소)
- 폰트 1년 immutable, 이미지 7일, css/js 1시간 캐시 — 재방문 시 3MB 재다운로드 제거

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
infraurp 2026-08-26 11:42:47 +09:00
parent ddacd1b7f5
commit 6c9d88aa2e

View File

@ -49,6 +49,30 @@
# 프록시를 한 단 거치므로 원본 IP 를 헤더로 전달한다. # 프록시를 한 단 거치므로 원본 IP 를 헤더로 전달한다.
RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Proto "https"
# ── 느린 회선 대응 ───────────────────────────────────────────────────
# 이 사이트는 메인 화면 하나에 woff 폰트만 3MB 넘게 끌어온다. 사내망에서는
# 티가 안 나지만 테더링·모바일에서는 로딩이 끝나지 않아 "접속 안 됨"으로 보인다.
# (실측: 같은 폰트가 유선망 0.15초 / 테더링 25초)
# ① 텍스트 자원 압축. HTML 52KB → 약 12KB.
# woff/woff2·이미지는 이미 압축돼 있어 넣지 않는다(CPU만 쓰고 안 줄어든다).
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/json application/xml
# 압축 여부가 캐시 키에 반영되도록
Header append Vary Accept-Encoding
# ② 정적 자원 캐시. 원래는 매 방문마다 3MB 를 다시 받았다.
# 폰트는 파일명이 바뀌지 않으므로 길게, css/js 는 배포마다 바뀌므로 짧게 잡는다.
<LocationMatch "\.(woff2?|ttf|eot|otf)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</LocationMatch>
<LocationMatch "\.(png|jpe?g|gif|ico|svg|webp)$">
Header set Cache-Control "public, max-age=604800"
</LocationMatch>
<LocationMatch "\.(css|js)$">
Header set Cache-Control "public, max-age=3600"
</LocationMatch>
ProxyPass /.well-known/acme-challenge/ ! ProxyPass /.well-known/acme-challenge/ !
ProxyPass / http://127.0.0.1:11060/ ProxyPass / http://127.0.0.1:11060/
ProxyPassReverse / http://127.0.0.1:11060/ ProxyPassReverse / http://127.0.0.1:11060/