- nginx 텍스트 자산 gzip 압축 추가로 css/js/json/HTML 전송량 절감 - cardList 카드 이미지 lazy-load로 시리즈 진입 시 즉시 다운로드 방지 - 정적 이미지 캐시 7일→30일 연장 - 미사용 style/deck-history.css 삭제 Co-authored-by: Cursor <cursoragent@cursor.com>
87 lines
2.3 KiB
Plaintext
87 lines
2.3 KiB
Plaintext
server {
|
|
listen 80;
|
|
server_name _;
|
|
|
|
root /usr/share/nginx/html;
|
|
index index.html;
|
|
|
|
client_max_body_size 25m;
|
|
|
|
# 텍스트 자산 gzip 압축 (이미지는 제외)
|
|
gzip on;
|
|
gzip_vary on;
|
|
gzip_comp_level 6;
|
|
gzip_min_length 1024;
|
|
gzip_proxied any;
|
|
gzip_types
|
|
text/plain
|
|
text/css
|
|
application/javascript
|
|
application/json
|
|
image/svg+xml
|
|
application/manifest+json;
|
|
|
|
# 공유 링크 → 덱 로드 페이지
|
|
location ~ ^/d/([A-Za-z0-9]+)$ {
|
|
return 302 /cardList.html?d=$1;
|
|
}
|
|
|
|
# API → 백엔드 컨테이너
|
|
location /api/ {
|
|
proxy_pass http://uniare-api:3000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
client_max_body_size 25m;
|
|
}
|
|
|
|
# HTML — 배포 직후 반영
|
|
location ~* \.html$ {
|
|
add_header Cache-Control "no-cache, must-revalidate";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# 핵심 JS — 구 URL(?v= 없음)도 최신 파일 제공 (CDN immutable 회피)
|
|
location = /script/deck-favorites.js {
|
|
add_header Cache-Control "no-cache, must-revalidate";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
location = /script/api.js {
|
|
add_header Cache-Control "no-cache, must-revalidate";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
location = /script/auth-form.js {
|
|
add_header Cache-Control "no-cache, must-revalidate";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# CSS — 배포 후 즉시 반영 (immutable 사용 안 함)
|
|
location ~* \.css$ {
|
|
expires 1h;
|
|
add_header Cache-Control "public, must-revalidate";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# JS — immutable 제거 (이미지보다 짧게 재검증)
|
|
location ~* \.js$ {
|
|
expires 1h;
|
|
add_header Cache-Control "public, must-revalidate";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# 이미지 등 — 내용이 고정된 정적 자산이므로 장기 캐시
|
|
location ~* \.(png|jpg|jpeg|gif|webp|ico|svg|woff2?)$ {
|
|
expires 30d;
|
|
add_header Cache-Control "public, immutable";
|
|
try_files $uri =404;
|
|
}
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.html;
|
|
}
|
|
}
|