移除 app 容器的對外埠,對外只保留 nginx 的 HTTPS 入口
摘要:
360-player 服務改為只 expose 不 ports,明文 HTTP 不再離開容器內網,
對外入口只剩 360-player-web 的 8443。
根本原因:
先前為了讓區網能用 IP 免憑證警告直連,保留了 app 的 ${PORT}:8360 對外映射。
但該埠在路由器上也有對外轉發,實際使用時是以網域連線
(http://jianmiau.tk:8360),等於在外網留了一條明文路徑。
影響:
外網走 8360 時,影片內容與 API 全程未加密,加上 TLS 的意義被抵消。
修法:
- docker-compose.yml 拿掉 360-player 的 ports,只留 expose: 8360;
nginx 仍可經容器內網以服務名連到它
- 保留註解說明如何加回來,並註明要綁死區網介面而非 0.0.0.0
- .env / .env.example 移除不再被 compose 參照的 PORT
- README 的 SSL 段落改寫,說明代價是區網也要用網域連
驗證:
docker compose config 展開後只有一個 published port(8443 → 8443),
360-player 服務底下僅剩 expose。
備註:路由器上 8360 的 port forwarding 需另外手動關閉,僅改 compose 不足以關掉外網入口。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -63,7 +63,7 @@ npm start # 或 node server.js
|
||||
cp .env.example .env && vi .env
|
||||
# 3. 建置並啟動
|
||||
docker compose up -d --build
|
||||
# 4. 瀏覽器開 https://你的網域:8443(或區網 http://NAS-IP:8360)
|
||||
# 4. 瀏覽器開 https://你的網域:8443
|
||||
```
|
||||
|
||||
Synology Container Manager:「專案」→「新增」→ 選這個資料夾,它會讀取 `docker-compose.yml`,
|
||||
@@ -88,8 +88,10 @@ privkey.pem 私鑰
|
||||
|
||||
兩點注意:
|
||||
|
||||
- 憑證是綁網域的,**用區網 IP 連 HTTPS 一定會跳警告**。所以 compose 同時保留了
|
||||
HTTP 的 `${PORT}:8360`:區網走 http、外網走 https。想只留 HTTPS 就把那段 `ports` 刪掉。
|
||||
- **對外只有 8443 一個入口**:app 容器只 `expose` 不 `ports`,明文那條不會離開容器內網。
|
||||
代價是憑證綁網域,區網也得用網域連(`https://jianmiau.tk:8443`)而不是 IP —— 用 IP 連
|
||||
會跳憑證警告。真的想要區網免警告的快速通道,把 app 的 `ports` 加回來並綁死區網介面
|
||||
(`"192.168.0.15:8360:8360"`),不要開成 `0.0.0.0`,否則等於在外網開了一條明文路徑。
|
||||
- nginx 這邊關掉了 `proxy_buffering` 並把 `proxy_max_temp_file_size` 設為 0。
|
||||
影片是靠 HTTP Range 串流的,開著緩衝會讓 nginx 先把整段回應寫成暫存檔再吐出去,
|
||||
幾 GB 的來源會直接塞爆容器磁碟。`/api/events`(SSE)另外把 `proxy_read_timeout`
|
||||
|
||||
Reference in New Issue
Block a user