技術文章 · IT 指令工具箱

Nginx、Apache 指令:檢查設定、Virtual Host、Log 與重新載入

整理 nginx -t、nginx -T、apachectl configtest、httpd -S、access/error log 與不中斷重新載入的常用指令。

作者 Steve Chen · 發布  · 約 5 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

改 Web Server 設定時,順序應該是備份、語法檢查、列出實際載入設定、重新載入、再從外部驗證。設定檔寫對不等於 DNS、TLS、上游與防火牆都對。

23 組範例NginxApache HTTP Server 2.4Linux查核日期:2026-08-11
動手前:不要直接改正式檔後 restart。先確認 include 順序與 virtual host 命中結果;憑證私鑰、Basic Auth 檔與 log 都可能含敏感資料。

Nginx 設定與狀態

查看 Nginx 版本Nginx

nginx -v

簡短顯示版本。

查看編譯參數Nginx

nginx -V

包含模組、OpenSSL 與預設路徑。

檢查設定語法Nginx

sudo nginx -t

成功後才 reload;仍不保證上游可用。

輸出完整合併後設定Nginx

sudo nginx -T

可能含內部位址與路徑,分享前遮蔽。

找出 server_nameNginx

sudo nginx -T 2>&1 | grep -n 'server_name'

用來排查重複或 default server。

重新載入設定Nginx/systemd

sudo systemctl reload nginx

先 nginx -t;reload 失敗要看 journal。

查看服務狀態Nginx/systemd

systemctl status nginx --no-pager

搭配 journalctl 看完整錯誤。

查看近期服務 logNginx/systemd

journalctl -u nginx --since '30 minutes ago' --no-pager

Nginx 自身 access/error log 可能在別處。

追蹤 error logNginx

sudo tail -F /var/log/nginx/error.log

實際路徑依發行版與設定。

追蹤特定狀態碼Nginx

sudo awk '$9 ~ /^5/ {print}' /var/log/nginx/access.log | tail -50

欄位位置取決於 log_format,先看格式。

Apache 設定與 Virtual Host

查看 Apache 版本Apache

apachectl -v

有些系統命令是 apache2ctl。

檢查設定語法Apache

sudo apachectl configtest

看到 Syntax OK 才進下一步。

列出 Virtual Host 對應Apache

sudo apachectl -S

可看預設 vhost、port 與設定檔行號。

列出已載入模組Apache

sudo apachectl -M

確認 rewrite、ssl、proxy 等模組。

顯示完整啟動設定Apache

sudo apachectl -t -D DUMP_RUN_CFG

不同平台輸出支援度略有差異。

重新載入 ApacheApache/systemd

sudo systemctl reload apache2

RHEL 系列服務名稱通常是 httpd。

RHEL 系列重新載入Apache/systemd

sudo systemctl reload httpd

先用 systemctl status 確認服務名。

查看 Apache 近期 journalApache/systemd

journalctl -u apache2 --since '30 minutes ago' --no-pager

RHEL 系列換成 httpd。

追蹤 Apache error logApache

sudo tail -F /var/log/apache2/error.log

路徑依發行版與 vhost 設定。

外部驗證與上游

帶 Host header 測 HTTP vhostcurl

curl -i -H 'Host: www.example.com' http://127.0.0.1/

只適用 HTTP;HTTPS 還要正確 SNI。

指定 IP 測 HTTPS SNIcurl

curl --resolve www.example.com:443:127.0.0.1 -I https://www.example.com/

同時保留正確 Host 與 SNI。

查看回應時間拆解curl

curl -sS -o /dev/null -w 'connect=%{time_connect} first=%{time_starttransfer} total=%{time_total}\n' https://www.example.com/

可區分連線與上游處理時間。

確認本機監聽 PortLinux

sudo ss -lntp | grep -E ':(80|443)\b'

監聽不等於外部防火牆已放行。

怎麼確認有做對

  • 語法檢查成功後 reload,再確認程序沒有退出。
  • 用實際 hostname、SNI 與外部來源測 HTTP status、內容與憑證。
  • 觀察 reload 前後 error log 與 5xx 比例。

常見錯誤

  • 語法沒驗就 restart。
  • 只 curl localhost,沒有測真實 Host/SNI/DNS。
  • 忽略 include 順序與 default virtual host。
  • 把 502 全部歸咎 Nginx,沒查 upstream。

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

聯絡廷皓討論 看更多文章