Files
error-page/README.md
T
2026-08-15 19:50:54 +09:00

53 lines
1.7 KiB
Markdown

# 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은 가로채지 않습니다.
## 배포
NAS 예: `/volume1/09_container_manager/@error-page`
```bash
docker compose up -d
```
확인:
```bash
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 리버스 프록시
1. `upstreams.map`에 호스트 → **지금 DSM에 적어 둔 목적지 포트**를 넣습니다.
2. 해당 호스트의 리버스 프록시 목적지를 `127.0.0.1:4098`로 바꿉니다. (앱 포트로 두면 나스 에러창이 그대로입니다.)
3. WebSocket이 필요한 호스트는 DSM에서 WS를 그대로 켭니다.
4. SSL은 지금처럼 DSM이 종료합니다.
한 줄 추가 후:
```bash
docker exec error-page nginx -s reload
```
와일드카드 `*.takits.me``127.0.0.1:4098` 한 규칙으로 모아도 됩니다. 맵에 없는 호스트는 공통 에러 페이지가 뜹니다.
## 파일
| 파일 | 역할 |
|------|------|
| `upstreams.map` | 호스트별 앱 포트 |
| `html/index.html` | 502/503/504 페이지 |
| `nginx.conf` | 프록시 + 에러 가로채기 |