在多站台 WordPress 主機上整理 Nginx 設定時,最有效率的方式不是直接修改線上檔案,而是讓 Codex session 與目前的 Terminal、設定檔和測試結果保持同一個工作脈絡。這篇文章整理一套安全協作流程,協助我們檢查 Nginx VHOST、防護敏感檔案,並在正式 reload 前完成驗證。
Codex session 可以協助什麼
Codex session 適合用來整理設定、比對檔案、產生檢查指令,以及解讀 nginx -T、nginx -t 和 curl 的結果。實際變更前,仍應先確認目標主機、網域與設定檔路徑,並保留原始備份。
協作時可以把工作分成三層:
- 本機專案層:整理 Git 裡的 Nginx 範本、共用防火牆檔與部署腳本。
- Terminal 檢查層:由使用者登入主機後,執行唯讀檢查指令並把輸出提供給 Codex 分析。
- 線上套用層:由使用者確認差異後,再執行備份、語法檢查與平滑 reload。
先建立可共享的工作脈絡
在 Codex session 中,建議先說明目前工作的範圍,例如「整理 orca-biz.com 的 Nginx VHOST 防護,不修改 WordPress 程式」。接著提供不含密碼、Token 或私鑰的檔案內容與檢查結果。
主機端可以先執行以下唯讀指令:
hostnamectl nginx -t nginx -T | grep -n "server_name\\|include.*firewall\\|root " ls -l /usr/local/nginx/conf/vhost/ sed -n '1,220p' /usr/local/nginx/conf/orca-security-firewall.conf
這些輸出可以讓 Codex 判斷目前有哪些 VHOST、共用檔案放在哪裡,以及規則是否真的被載入。不要把 SSH 密碼、API Token、私鑰、資料庫密碼或完整的 WordPress wp-config.php 貼到 session。
理解 Nginx 的設定層級
Nginx 的 http {} 適合放全域設定,例如 MIME type、log format、Cloudflare 真實 IP 和 rate limit zone。使用 location 的網址防護規則,則應放在實際接收請求的 server {} 內。
多站台配置可以把規則集中在一份共用檔案,再由每個 VHOST 明確載入:
server { listen 443 ssl; server_name example.com; root /home/wwwroot/example.com; include /usr/local/nginx/conf/orca-security-firewall.conf; }
這樣的整理方式能讓規則集中維護,也能從每個 VHOST 清楚看出哪些網站已啟用 origin 端防護。
共用的 WordPress 防護規則
以下範例用來降低敏感檔案探測在 Nginx、PHP-FPM 和 WordPress 產生的負擔。它不是 Cloudflare WAF 的替代品,而是 origin 端的第二層防護:
# 停用 XML-RPC location = /xmlrpc.php { deny all; access_log /home/wwwlogs/blocked_attacks.log orca_log; log_not_found off; } # 阻擋隱藏檔案,保留 ACME 驗證路徑 location ~ /\\.(?!well-known).* { deny all; access_log /home/wwwlogs/blocked_attacks.log orca_log; log_not_found off; } # 阻擋設定檔、備份檔與常見敏感檔案 location ~* \\.(env|ini|conf|config|yml|yaml|bak|sql|sh|log)$ { deny all; access_log /home/wwwlogs/blocked_attacks.log orca_log; log_not_found off; } # 視需求阻擋說明與開發檔案 location ~* (composer\\.(json|lock)|package\\.(json|lock)|readme\\.(html|md|txt)|license\\.txt)$ { deny all; access_log /home/wwwlogs/blocked_attacks.log orca_log; log_not_found off; }
是否封鎖 license.txt、readme.html 或 XML-RPC,應依網站功能與外掛需求決定。設定整理的重點是可追蹤、可回復,而不是所有網站都套用完全相同的規則。
使用 Codex session 的安全操作流程
1. 先檢查實際命中的 VHOST
nginx -T | grep -n -A12 -B4 "server_name example.com" curl -I -H 'Host: example.com' http://127.0.0.1 curl -kI --resolve example.com:443:127.0.0.1 https://example.com/
如果網站前方有 Cloudflare,來源端測試最好使用 --resolve 或直接測試 origin,避免把 Cloudflare cache、WAF 或代理回應誤判成 Nginx 結果。
2. 先預覽差異,再修改設定
若使用 Orca Shkit 管理設定,先執行 dry-run:
orca-shkit-server deploy-nginx-conf --dry-run orca-shkit-server include-vhost-firewall --dry-run
確認目標檔案、VHOST 清單和預計插入位置後,再執行套用。每次只處理一個明確變更,方便 Codex session 追蹤前後差異。
3. 備份、語法檢查與 reload
sudo cp -a /usr/local/nginx/conf/vhost/example.com.conf \\ /usr/local/nginx/conf/vhost/example.com.conf.bak.$(date +%Y%m%d%H%M%S) sudo nginx -t sudo systemctl reload nginx sudo systemctl is-active nginx
nginx -t 成功只代表語法有效,還要用實際 URL 驗證請求是否命中預期的 VHOST 和 location。
4. 以 curl 驗證正常與封鎖路徑
curl -I -A 'Mozilla/5.0' https://example.com/ curl -I -A 'Mozilla/5.0' https://example.com/.env curl -I -A 'Mozilla/5.0' https://example.com/license.txt curl -I -A 'Mozilla/5.0' https://example.com/xmlrpc.php sudo tail -f /home/wwwlogs/blocked_attacks.log
首頁應維持正常回應;敏感路徑通常應回傳 403。若 Cloudflare 已先攔截請求,則要同時查看 Cloudflare 事件與 origin log,分辨請求究竟在哪一層被處理。
Codex session 的共享邊界
「共享 session」建議共享工作脈絡,不要共享憑證本身。可以分享命令、設定差異、錯誤訊息和去除敏感值後的 log;密碼則由使用者在自己的 Terminal 互動輸入。Codex 可以根據終端輸出協助分析,但不應要求把密碼貼進對話。
如果是多人協作,應在 session 開始時標記:
- 目前操作的主機與網域。
- 本次允許修改的檔案。
- 是否只做唯讀檢查,或允許執行 reload。
- 備份位置與回復方式。
這種方式可以讓 Codex、工程師與維運人員共用同一份檢查紀錄,同時避免把主機存取權限直接暴露在聊天內容中。
常見檢查結果
為什麼設定檔存在,但 URL 還是回傳 200?
先確認請求命中的 server_name、443 VHOST、Cloudflare origin,以及該 VHOST 是否載入共用 include。設定檔存在不等於目前請求一定會經過它。
可以把 location 規則只放在 nginx.conf 嗎?
如果規則是 location,不能直接放在 http {}。應放在每個實際處理請求的 server {},或由該 server include 共用檔案。
Codex 需要知道 SSH 密碼嗎?
不需要。由使用者在本機 Terminal 或 SSH 互動輸入即可;提供去除密碼與 Token 的命令輸出,就足以進行大多數設定分析。
結語
Codex session 的價值,在於把設定檔、命令結果、差異與驗證步驟整理成可追蹤的協作脈絡。對多站台 WordPress 主機而言,採用「共用規則、VHOST 明確 include、dry-run、備份、nginx -t、reload、curl 回讀」的流程,就能在不暴露主機密碼的前提下,穩定完成 Nginx 防護設定。














