使用 Docker、OpenWebUI 和 Nginx 實現反向代理部署的簡易指南【Docker超理解|進階篇】

在企業級的服務架構中,「反向代理」是不可或缺的一環。 本篇文章將示範如何透過 Docker 容器 部署應用服務,並搭配 Nginx、DNS 域名解析 以及 SSL 憑證,打造一個 安全、可靠、具延展性 的反向代理環境。

我們將以 OpenWebUI 為例,並實作企業常見的 LDAP 登入機制,一步步帶你完成從伺服器架設到反向代理部署的完整流程。

這樣的架構不僅能確保主機免於直接暴露在外部網路,更能透過 HTTPS 加密,讓使用者在連線時獲得更高的安全性與信任感。

在現今網路環境中,將本機電腦上的服務進行反向代理是一項非常重要的工作。

其主要目的如下:

  1. 提升安全性與信任感
    透過將 HTTP 升級為 HTTPS,能為使用者提供更高的安全性與信任程度,保護資料在傳輸過程中的完整性。
  2. 隱藏內部架構
    將本機的網址及端口隱藏,避免直接暴露在外部網路中,有效降低潛在的資安攻擊風險。
  3. 集中管理流量
    反向代理能幫助我們集中管理流量,並根據需求進行流量分配、負載平衡,提升服務的穩定性。
  4. 簡化憑證管理
    通過反向代理工具(如 Nginx),可以輕鬆集成 SSL 憑證,減少繁瑣的配置作業。

一、準備工作

在專案資料夾下建立 docker-compose.yml

services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    expose:
      - "8080"
    volumes:
      - open-webui-data:/app/backend/data
    restart: always
    environment:
      ENABLE_LDAP_AUTH: "true"
      LDAP_SERVER_HOST: "ldap"
      LDAP_SERVER_PORT: "389"
    networks:
      - proxy
      - ldapnet

  ldap:
    image: osixia/openldap:1.5.0
    container_name: openldap
    volumes:
      - ./ldap/var:/var/lib/ldap
      - ./ldap/etc:/etc/ldap/slapd.d
    ports:
      - "389:389"
    networks:
      - ldapnet

  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./nginx/data:/data
      - ./nginx/letsencrypt:/etc/letsencrypt
    networks:
      - proxy

volumes:
  open-webui-data: {}

networks:
  ldapnet:
    driver: bridge
  proxy:
    driver: bridge

docker-compose.yml 架構目前說明

服務名稱功能
openwebui主應用程式(內部 port 8080,對外由 Nginx Proxy Manager 接收請求)
ldap內部 LDAP 伺服器
(實務中你會改成連公司 AD)
nginx-proxy-managerNginx Proxy Manager
(反向代理 + SSL 終結)
networksproxy 用於反向代理與 webui 溝通;ldapnet 用於 openwebui 與 LDAP 伺服器溝通

二、啟動與重啟環境指令

在你的 docker-compose.yml 目錄下執行:

# 首次或修改設定後啟動
docker compose up -d

# 查看服務狀態
docker compose ps

三、接下來的實際步驟流程(含公司 SSL + DNS)

因為你的公司會提供 SSL 憑證 以及 DNS

所以流程會跟「Let’s Encrypt 自動簽發」的方式略有不同,請特別注意。


Step 1:確認公司 DNS 設定

  • 公司 IT 應該會幫你把: openwebui.公司網域.com → 指向你這台伺服器的 外部 IP

可以用這個指令確認:

nslookup openwebui.公司網域.com

如果回傳你的伺服器 IP,就代表 DNS OK


Step 2:啟動容器

docker compose up -d
  • Nginx Proxy Manager 會跑在: http://<你的伺服器IP>:81
  • 預設帳密:
    • 帳號:admin@example.com
    • 密碼:changeme

第一次登入會要求你修改帳號、密碼。


Step 3:把 SSL 憑證放進容器

由於你是用「公司提供的 SSL」,而不是自簽或 Let’s Encrypt,所以要手動匯入:

  1. 公司 IT 會提供你這三個檔案(或類似命名):
    • cert.pem(公鑰)
    • privkey.pem(私鑰)
    • chain.pem(中繼憑證,若有)
  2. 登入 http://<ip>:81 → 點選欄位 SSL CertificatesAdd SSL Certificate 選擇 Custom → 上傳這些檔案(或貼上內容),名稱隨意取名即可。
  3. 成功上傳後,你會看到它出現在憑證列表中

Step 4:建立 Proxy Host

進入 Nginx Proxy Manager 介面 → HostsProxy HostsAdd Proxy Host

填寫以下設定:

欄位內容
Domain Namesopenwebui.公司網域.com
Schemehttp
Forward Hostname / IPopenwebui
Forward Port8080
Enable Websockets
Block Common Exploits

SSL 設定:

  • SSL Certificate → 選剛剛匯入的公司 SSL 憑證
  • Force SSL → 打勾✅
  • HTTP/2 → 打勾✅

按下「Save」。

現在你應該就能用下面的網址:

<https://openwebui.公司網域.com>

來訪問你的服務囉 !


Step 5:測試 LDAP 登入

因為反向代理不會影響 LDAP:

  • 使用公司 AD 帳號登入 WebUI

如果仍然被卡在”待授權”,可以用管理員帳號:

  • 登入 Open WebUI 選擇左下設定裡面的”管理員控制台” → “設定”→ “一般”→ “驗證”→ “預設使用者角色“,改為”使用者”

這樣有註冊在公司 AD 帳號的同仁就可以直接 AD 帳號登入進行使用


四 、完整操作路線圖

  1. 修改完 docker-compose.yml
  2. 啟動所有容器 docker compose up -d
  3. 公司幫你設定好 DNS → 指向伺服器 IP
  4. 匯入公司提供的 SSL 憑證(NPM 後台)
  5. 建立 Proxy Host → 指向 openwebui container
  6. 確認 https://openwebui.公司網域.com 是否可連
  7. 用公司 LDAP/AD 帳號登入 Open WebUI
  8. 開始正式使用

這樣就完成了整個 Open WebUI + 企業 LDAP + 公司 SSL + 反向代理 的架構 !

也是企業 生產等級 的部署了。


五、遇到「SSL 憑證先拿到,但 DNS 還沒開」操作流程

答案是:

  • 可以先做大部分步驟(例如 Nginx + 憑證匯入 + Proxy Host 設定)

無法從外部用網域訪問服務,因為 DNS 還沒解析到你的伺服器。


當前的條件

  • 有 SSL 憑證(例如 openwebui.company.com
  • 還沒有 DNS A 記錄(openwebui.company.com → 你的伺服器 IP
  • 本機或內部網路可存取

可以先做的步驟

Step 1:正常啟動 docker 環境

docker compose up -d

openwebuinginx-proxy-managerldap 都先跑起來。


Step 2:登入 Nginx Proxy Manager 後台

  • http://<你的伺服器IP>:81 預設帳密:admin@example.com / changeme 登入後修改密碼。

Step 3:上傳公司給你的 SSL 憑證

  • SSL Certificates → Add SSL Certificate → Custom
  • 上傳:
    • cert.pem(公鑰)
    • privkey.pem(私鑰)
    • chain.pem(中繼證書,若有)
  • 儲存後會看到證書出現在列表中

注意:雖然此時還沒有 DNS,但 SSL 憑證已經進 NPM,可以先備妥。


Step 4:建立 Proxy Host(提前綁定網域名稱)

你可以先建立 Proxy Host,例如:

欄位
Domain Namesopenwebui.company.com (即便現在還沒解析也沒關係)
Schemehttp
Forward Hostname / IPopenwebui
Forward Port8080
Websockets
SSL Certificate選剛剛匯入的公司憑證
Force SSL
HTTP/2

雖然現在 openwebui.company.com 還沒連得通,但設定已經存在。


Step 5:先用「hosts 檔」模擬 DNS(內部測試)

如果你想提早測試(不等公司開 DNS),

你可以在你 自己的電腦 上編輯 hosts 檔案,手動把網域指向伺服器 IP 👇

🖥 Windows

編輯:

C:\\Windows\\System32\\drivers\\etc\\hosts

加入一行:

192.168.0.10   openwebui.company.com

🐧 macOS / Linux

編輯:

/etc/hosts

加入一行:

192.168.0.10   openwebui.company.com

然後你就可以用:

<https://openwebui.company.com>

在瀏覽器打開服務 ✅

這樣的方式:

  • 不需要等 DNS 正式開通
  • SSL 憑證仍然有效(因為瀏覽器連線時域名匹配)
  • 適合內部測試 / 預先驗證架構

Step 6:等公司 DNS 開好後

當 IT 把 openwebui.company.com 指向你的伺服器 IP:

  • 你不需要重新設定任何東西
  • 你可以刪掉 hosts 檔案中的暫時設定
  • 網域就會從公司內外正常連上

小提醒

項目如果沒 DNS 的情況
Nginx Proxy Manager 安裝✅ 可先完成
SSL 憑證匯入✅ 可先完成
Proxy Host 設定✅ 可先完成
外部訪問網址❌ 不能用,因為沒解析
本機或內部測試✅ 可用 hosts 檔達成

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *