使用 Nginx Proxy Manager(NPM)做反向代理並自動更新 SSL 憑證
這是連續的關於架設網站的系列
- 在 ubuntu 使用 docker 架設 nginx 靜態網站伺服器
- 使用 duckdns 轉發自建的靜態網頁伺服器
- npm 反向代理 nginx 靜態網站 (自動更新SSL)
- npm 反向代理 http 服務 portainer (私簽SSL)
- npm 反向代理 http 服務 cockpit (自動更新SSL)
這是接續 npm 反向代理 nginx 靜態網站 (自動更新SSL) 的進階篇,前面的東西不再重複,記得先回到這篇做完才接著繼續看這裡
在上一篇已經完成網站的建制,現在要把改成一個實際的別人做的專案做練習
這裡使用 cockpit 當範例,創建一個 duck.dns 對外網域的網站
這篇跟直接反向代理 nginx 的那篇差異在於,範例用的靜態網站完全沒有安全限制所以不需要特別處理,這裡抓一個正常有安全限制的服務 cockpit 來當範例
安裝 cockpit
這個有被內建在 ubuntu 中直接用 apt 就可以安裝了
sudo apt install cockpit
sudo systemctl enable --now cockpit.socket
安裝好之後就可以用 http:\localhost:9090 直接打開了
反向代理設定注意事項
在使用 Nginx Proxy Manager 等反向代理時,需要在 cockpit.conf 中進行以下設定:
- AllowUnencrypted = true - 允許後端 HTTP 通訊
由於反向代理與 Cockpit 之間通常使用未加密的 HTTP 連接,此設定讓 Cockpit 接受來自代理服務器的 HTTP 請求,而 SSL/TLS 加密則由前端代理統一處理。 - ProtocolHeader = X-Forwarded-Proto - 識別真實協議類型
反向代理會通過 X-Forwarded-Proto header 告知 Cockpit 用戶端實際使用的協議(HTTPS),確保 Cockpit 生成正確的重定向 URL 並避免瀏覽器混合內容警告。 - Origins = https://your-domain.com - 限制跨域請求來源
明確指定允許的域名以防止 CSRF 攻擊,切勿使用 Origins = https: 或 Origins = *,否則任何第三方網站都能向您的 Cockpit 發送請求,造成安全風險。
編輯 cockpit.conf
sudo nano /etc/cockpit/cockpit.conf
輸入以下 (第三行記得改成自己的網域)
[WebService]
AllowUnencrypted = true
ProtocolHeader = X-Forwarded-Proto
Origins = https://cockpit.yourdomain.com
然後存檔即可
npm 反向代理
這裡用上一篇已經生成的網域就好,回到 npm 的 proxy 頁面把 Forward Port 從 8081 改成 9090 即可續用。
然後再瀏覽你自己的網域 https://chgsite.duckdns.org 應該就能看見你的網站了