60 lines
1.9 KiB
Markdown
60 lines
1.9 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은 가로채지 않습니다.
|
|
|
|
## 배포
|
|
|
|
`develop`에서 작업한 뒤 `main`에 머지하면 Gitea Actions가 아래 경로로 파일을 동기화하고 컨테이너를 재생성합니다.
|
|
|
|
```text
|
|
/volume1/09_container_manager/14_error-page
|
|
```
|
|
|
|
수동 실행:
|
|
|
|
```bash
|
|
cd /volume1/09_container_manager/14_error-page
|
|
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` | 프록시 + 에러 가로채기 |
|