Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

解決 WordPress REST API 錯誤:cURL error 28 的實戰過程

Posted on 2025-11-022025-11-04 by Rico

在使用 WordPress 時,如果在「網站健康檢查」頁面看到以下訊息:

REST API 發生錯誤
REST API 是 WordPress 及其他應用程式與伺服器進行通訊的一種方式。以區塊編輯器畫面為例,它便是依賴 REST API 來顯示與儲存內容。
測試 REST API 時發生錯誤:
REST API 回應: (http_request_failed) cURL error 28: Connection timed out after 10001 milliseconds

代表你的 WordPress 無法透過內部網路與自己通訊。這種錯誤看似奇怪,實際上非常常見,尤其當你的網站部署在 Docker 或反向代理環境 中。


🔍 問題現象

WordPress 會在檢查 REST API 時,嘗試透過 HTTP 請求連到自己的網址(例如 https://www.nuface.tw/wp-json/)。
但如果容器內的 DNS 無法解析這個網域,就會出現逾時錯誤 cURL error 28。

簡單來說,就是「WordPress 呼叫自己時,找不到自己」。


🧠 問題原因分析

在 Docker 架構中,容器的 DNS 設定通常繼承自 Docker Daemon 的預設設定。
若你的網站使用內部 DNS(例如公司內部的 172.16.100.1),而 Docker 內部沒有指定這個 DNS,
那麼容器在解析 www.nuface.tw 時就會失敗,導致請求逾時。

因此,REST API 錯誤的真正原因是 容器內 DNS 設定不正確。


🛠️ 解決步驟

1️⃣ 在 docker-compose.yml 中加入內部 DNS

開啟你的 WordPress 容器設定檔(例如 docker-compose.yml),在服務段落內加上:

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: always
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: yourpassword
      WORDPRESS_DB_NAME: wordpress
    dns:
      - 172.16.100.1   # 內部 DNS(例如公司 DNS)

儲存後重新啟動容器:

docker compose down
docker compose up -d

2️⃣ 確認容器內 DNS 正常

進入容器測試解析:

docker exec -it wordpress bash
cat /etc/resolv.conf
dig www.nuface.tw

若能正確解析出 IP,表示 DNS 已生效。


3️⃣ 驗證 REST API 是否恢復

回到 WordPress 後台 → 工具 → 網站健康檢查 → 狀態
重新執行檢查,應會看到:

✅ REST API 運作正常

至此,問題已成功解決!


💡 延伸建議

為避免類似問題再次發生,建議:

  1. 在 Docker Daemon 層設定預設 DNS
    編輯 /etc/docker/daemon.json: { "dns": ["172.16.100.1", "8.8.8.8"] } 然後重啟 Docker: systemctl restart docker
  2. 使用內部 DNS 解析內部域名
    若 WordPress 與反向代理(例如 Nginx、Traefik)在同一主機,
    內部 DNS 能避免外部繞行導致的連線逾時。

✅ 結論

這次的 REST API 錯誤並非 WordPress 程式錯誤,而是 容器網路與 DNS 配置問題。
在 Docker 環境中,只要確保容器能正確解析網站域名,
無論是 REST API、Gutenberg 編輯器、還是自動更新檢查,都能恢復正常運作。


📘 總結一句話:
「當 WordPress 無法呼叫自己時,請先檢查 DNS。」

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme