세 가지를 함께 고쳤다. 러시아 편에서 고리키와 어머니의 단서가 서로의 정답을 그대로 담고 있어 두 칸이 한꺼번에 풀렸다. 양쪽 단서에서 상대 이름을 뺐다. nginx 의 try_files 폴백을 =404 로 바꿨다. 페이지가 여럿이 된 뒤로는 없는 경로도 200 으로 셸을 내려주어, 배포가 안 됐는데도 정상으로 보이는 일이 있었다. 프록시(NPM)가 js/css 에 제 캐시 헤더를 덧붙여 원본의 no-cache 를 덮어쓴다. 이미지 빌드 때 자산 내용의 sha256 앞 열 자리를 뽑아 각 페이지의 링크를 assets/crossword.js?v=<해시> 로 바꾸는 단계를 Dockerfile 에 넣었다. 저장소의 HTML 은 해시 없는 상태로 두고, 자산이 바뀌면 URL 이 저절로 바뀐다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
31 lines
906 B
Plaintext
31 lines
906 B
Plaintext
server {
|
|
listen 8080;
|
|
server_name _;
|
|
|
|
root /usr/share/nginx/html;
|
|
index index.html;
|
|
|
|
charset utf-8;
|
|
charset_types text/css application/javascript application/json;
|
|
|
|
# 프록시(NPM) 뒤에 있으므로 실제 클라이언트 IP 로그
|
|
real_ip_header X-Forwarded-For;
|
|
|
|
gzip on;
|
|
gzip_min_length 1024;
|
|
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
|
|
|
|
# 여러 페이지짜리 정적 사이트. 없는 경로는 index.html 로 되돌리지 말고 404 를 준다.
|
|
# (되돌리면 /없는페이지.html 이 200 으로 셸을 내려주어 배포 사고를 못 알아챈다)
|
|
location / {
|
|
try_files $uri $uri/ =404;
|
|
add_header Cache-Control "no-cache, must-revalidate";
|
|
}
|
|
|
|
location = /healthz {
|
|
access_log off;
|
|
default_type text/plain;
|
|
return 200 "ok\n";
|
|
}
|
|
}
|