[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 給的畫面

這幾個問題變成死結,沒網路導致你無法用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 網站。