# DR-Nginx — Nginx 設定錯誤回滾 SOP **目標時間**: < 5 分鐘 **觸發場景**: nginx conf 錯誤導致 reload 失敗,或手動修改造成設定漂移 **工具**: Ansible, git **最後更新**: 2026-04-11 (Claude Sonnet 4.6 Asia/Taipei) --- ## 場景 A:nginx conf 語法錯誤(最常見) ```bash # 在 MacBook 執行 # 1. 確認問題 ssh wooo@192.168.0.188 "sudo nginx -t 2>&1" # 2. 用 Ansible 從 Git 重新部署正確版本 cd /Users/ogt/awoooi ansible-playbook -i infra/ansible/inventory/hosts.yml \ infra/ansible/playbooks/nginx-sync.yml \ --tags 188 # 3. 驗收 curl -s -o /dev/null -w '%{http_code}' https://awoooi.wooo.work # 期望: 200 ``` --- ## 場景 B:需要回滾到前一版本 ```bash # 查看最近 nginx conf 變更 git log --oneline -- infra/ansible/roles/nginx/templates/188-all-sites.conf.j2 | head -5 # 回滾到前一個 commit git revert HEAD --no-edit # 或 git checkout -- git push gitea main # 立即用 Ansible 套用回滾版本 ansible-playbook -i infra/ansible/inventory/hosts.yml \ infra/ansible/playbooks/nginx-sync.yml \ --tags 188 ``` --- ## 場景 C:188 nginx 完全無法啟動,需要 110 接管 ```bash # 在 192.168.0.110 或 188 強制 keepalived failover # (僅在 188 完全失效時使用) ssh wooo@192.168.0.110 "sudo systemctl status keepalived" # 若 110 已自動接管 VIP:200,確認: ssh wooo@192.168.0.110 "ip addr show | grep 192.168.0.200" # 期望:顯示 VIP 已在 110 # 確認對外服務正常(透過 VIP) curl -s -o /dev/null -w '%{http_code}' https://awoooi.wooo.work ``` --- ## 預防 - 所有 nginx conf 變更必須透過 `infra/ansible/playbooks/nginx-sync.yml` 部署 - 禁止直接 SSH 到 188 修改 `/etc/nginx/sites-enabled/` - Ansible 會自動 `backup: true`(在部署前備份 `.bak.TIMESTAMP`)