[toc] > 本文是一篇面向組織內部開發或維運人員的「無網路 WordPress VM 複製試診」操作指南。 ## 一、基本前提 * WordPress 部署方式:Docker Compose 單站 * Nginx 部署方式:跟上 Docker 輸出成 container * VM 位置:已複製的本地處理機 (無安裝 DNS server 並且無網路) * 目的地址:https://aict.nkust.edu.tw/digitrans ## 二、問題與配套解方 ### ❌ 問題 1: 連線 https://aict.nkust.edu.tw/digitrans 時直接報 "We’re having trouble finding that site" 原因: * 瀏覽器會向 DNS 發送域名解析請求 * DNS server 回傳 IP 依據後連線 Web 服務器 * 但目前沒網路 → DNS 失敗 解決方式: 改走 `localhost` ### ❌ 問題 2: 打開 127.0.0.1 沒有任何 WordPress 頁面 原因: * WordPress 是用 Docker 中的 nginx container 操作 * Nginx 中定義了 server_name = aict.nkust.edu.tw ,且使用 certbot + 443 SSL * 80 port 被 redirect 到 cerbot ,該服務是需要網路的自動產簽證機器人但目前無網路,所以直接請求127.0.0.1:80時才會沒東西 解決方式: 確認 nginx 是 Docker container : ```bash= docker ps ``` 你會看到類似: ```bash= CONTAINER ID IMAGE ... NAMES xxx nginx ... nginx_nginx_1 ``` 進入 container 確認 nginx 配置 ```bash= sudo docker exec -it nginx_nginx_1 bash cd /etc/nginx ls ``` 你會看到 `nginx.conf, conf.d/` 等設定 查看 conf.d/default.conf ,確認其中有: ```bash= server_name aict.nkust.edu.tw; ... location /digitrans/ { proxy_pass http://di_wp/; # 反向代理到另一 container } ``` 不用修改 nginx 內部配置,而是修改系統 hosts 解決域名對應 ### ❌ 問題 3: nginx config 定義了 server_name aict.nkust.edu.tw 封止 localhost 直接呼叫 > Nginx 是一個支援「虛擬主機(virtual hosts)」的伺服器,它在收到一個請求時,會根據請求中的 Host: header 來判斷要套用哪個 server {} 區塊的設定。 例如: ```bash= GET /digitrans/ HTTP/1.1 Host: aict.nkust.edu.tw ``` 只有當這個 Host header 對應到設定檔中的: ```bash= server_name aict.nkust.edu.tw; ``` 它才會觸發該站點。 👉 所以若你輸入 `https://127.0.0.1/digitrans`,則 `Host: 127.0.0.1` 會找不到對應的站點設定,導致無法進入網站。 → 因為你的瀏覽器會送出:`Host: 127.0.0.1` → 這時 Nginx 根本「不會把這請求交給 `aict.nkust.edu.tw` 的那個 server block」 所以你看到的會是 404 Not Found 或 default_server 給的畫面 ![圖片1](https://hackmd.io/_uploads/rJVroRbbgx.png) 這幾個問題變成死結,沒網路導致你無法用google dns server去解域名(嚴格來說本來就不需要)。為了讓wordpress改動能夠在本地端 `localhost` 看到使用 `127.0.0.1` 去請求但 `server_name` 寫死了讓請求直接對外。對外又因為沒網路導致失敗。 但如果你透過 /etc/hosts 將:`127.0.0.1 aict.nkust.edu.tw` 寫入 瀏覽器輸入:`https://aict.nkust.edu.tw/digitrans` 就會送出: `Host: aict.nkust.edu.tw` > ✅ 完美對應上 server_name,Nginx 才會正確反向代理給你 WordPress 網站。