1.9 KiB
1.9 KiB
error-page
*.takits.me가 컨테이너 다운으로 502/503/504가 날 때, DSM 기본 에러창 대신 쓰는 공통 nginx.
DSM 리버스 프록시가 앱 포트에 직접 붙으면, 그 포트가 닫혀 있을 때 나스가 에러 페이지를 그립니다. 이 컨테이너는 항상 127.0.0.1:4098에서 떠 있고, Host로 실제 앱에 넘긴 뒤 업스트림이 죽었을 때만 공통 페이지를 보여 줍니다.
브라우저 → DSM RP (HTTPS) → 127.0.0.1:4098 (error-page)
└─ Host가 takits.me 이면 127.0.0.1:4889
앱의 404/500은 가로채지 않습니다.
배포
develop에서 작업한 뒤 main에 머지하면 Gitea Actions가 아래 경로로 파일을 동기화하고 컨테이너를 재생성합니다.
/volume1/09_container_manager/14_error-page
수동 실행:
cd /volume1/09_container_manager/14_error-page
docker compose up -d
확인:
curl -sI http://127.0.0.1:4098/healthz
curl -sI -H "Host: unknown.takits.me" http://127.0.0.1:4098/
두 번째가 502와 커스텀 HTML이면 정상입니다.
DSM 리버스 프록시
upstreams.map에 호스트 → 지금 DSM에 적어 둔 목적지 포트를 넣습니다.- 해당 호스트의 리버스 프록시 목적지를
127.0.0.1:4098로 바꿉니다. (앱 포트로 두면 나스 에러창이 그대로입니다.) - WebSocket이 필요한 호스트는 DSM에서 WS를 그대로 켭니다.
- SSL은 지금처럼 DSM이 종료합니다.
한 줄 추가 후:
docker exec error-page nginx -s reload
와일드카드 *.takits.me → 127.0.0.1:4098 한 규칙으로 모아도 됩니다. 맵에 없는 호스트는 공통 에러 페이지가 뜹니다.
파일
| 파일 | 역할 |
|---|---|
upstreams.map |
호스트별 앱 포트 |
html/index.html |
502/503/504 페이지 |
nginx.conf |
프록시 + 에러 가로채기 |