# 📦 環境說明:Docker + Nginx 容器版 本教學適用於: - ✅ Nginx **不是安裝在宿主機(Ubuntu/CentOS)**,而是 - ✅ **跑在 Docker 容器中(使用 `docker run` 或 `docker-compose` 部署)**。 在這種情況下: - 憑證與 Nginx 設定檔都在 **容器內部**。 - 需要用 `docker cp`、`docker exec` 操作容器內部的檔案。 - 重啟 Nginx 時要用 `docker restart 容器名`。 > ⚠️ 如果 Nginx 是直接安裝在宿主機,這套流程不適用! --- [toc] # ✨ Docker + Nginx 換憑證步驟 ## 1. 確認 Nginx 在哪個容器 ```bash sudo docker ps ```  > ✅ 這邊可以看到Nginx 的容器是nginx_nginx_1 ## 2. 進入 Nginx 容器 ```bash= sudo docker exec -it nginx_nginx_1 bash ```  > ✅ 有出現root跟對應的docker container ID代表正確進入容器 ## 3. 找出 Nginx 設定檔 ```bash= find / -name nginx.conf ```  找不到沒關係,一般來說 Nginx 設定檔會放在 - `/etc/nginx/nginx.conf` - `/etc/nginx/conf.d/default.conf` 下一步可以從常見位置去搜尋  > ✅ 在這裡 是使用 `/etc/nginx/conf.d/default.conf` 作為主要的設定檔 ## 4. 確認 SSL 設定使用的檔案 ```bash= cat /etc/nginx/conf.d/default.conf ``` 在 server 區塊應該會看到:  ```nginx= ssl_certificate /etc/letsencrypt/live/aict.nkust.edu.tw/server.crt; ssl_certificate_key /etc/letsencrypt/live/aict.nkust.edu.tw/server.key; ``` > ✅ 這邊可以得知SSL憑證是放在 `/etc/letsencrypt/live/aict.nkust.edu.tw` 底下,這是要換的新憑證目標位置。 ## 5. (在宿主機)合併 server.cer + uca.cer (!!重要) 首先你會拿到電算中心給的檔案  | 檔案 | 類別 | | -------- | -------- | | root.cer(或 .crt、.pem) | 根憑證(Root Certificate) | | uca.cer(或 .crt、.pem) | 中繼憑證(Intermediate Certificate)| | server.cer(或 .crt、.pem) | 你的伺服器憑證(Server Certificate) | | server.key | 對應私鑰(Private Key) | 然後你要把檔案丟到小聯盟網頁的ubuntu上,並在上方合併 server.cer + uca.cer > ⚠️ 注意順序是 server.cer 在前,uca.cer 在後 ```bash= cat server.cer uca.cer > server.crt ```  ## 6. 把新的憑證複製進容器 > ⚠️ 記得在複製前要先把舊的進行備份,例如 `mv` 或 `cp` 指令 ```bash= sudo docker cp server.crt nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/server.crt sudo docker cp nkust.edu.tw.key nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/server.key sudo docker cp uca.cer nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/uca.cer sudo docker cp root.cer nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/root.cer ```  > ✅ 有出現Successfully就代表成功了 ## 7. reload nginx 或重啟容器 在容器內 reload Nginx: ```bash= nginx -s reload ```  > ✅ 沒出現錯誤的話代表成功刷新了 如果 reload 有問題,從宿主機重啟容器: ```bash= sudo docker restart nginx_nginx_1 ```  > ✅ 沒出現錯誤的話代表成功刷新了 ## 8. 檢查憑證是否成功更新  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up