rich@rich-vb-u24:~/pure-php-app$ ls nginx/logs 
longfutemple.conf longfutemple.conf_ practice.conf wordpress.conf
rich@rich-vb-u24:~/pure-php-app$ ls nginx/logs/access.log error.log
rich@rich-vb-u24:~/pure-php-app$ less nginx/logs/error.log 
rich@rich-vb-u24:~/pure-php-app$ date
**西元2026年08月06日 (週四) 21時04分09秒 CS**T
rich@rich-vb-u24:~/pure-php-app$ less nginx/logs/error.log 
rich@rich-vb-u24:~/pure-php-app$ cat nginx/logs/error.log 
**2026/08/06 13:02:42** [notice] 1#1: using the "epoll" event method
2026/08/06 13:02:42 [notice] 1#1: nginx/1.31.3
2026/08/06 13:02:42 [notice] 1#1: built by gcc 15.2.0 (Alpine 15.2.0) 
2026/08/06 13:02:42 [notice] 1#1: OS: Linux 6.17.0-35-generic
2026/08/06 13:02:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:524288
2026/08/06 13:02:42 [notice] 1#1: start worker processes
2026/08/06 13:02:42 [notice] 1#1: start worker process 20
2026/08/06 13:02:42 [notice] 1#1: start worker process 21
2026/08/06 13:02:42 [notice] 1#1: start worker process 22
2026/08/06 13:02:42 [notice] 1#1: start worker process 23
2026/08/06 13:02:42 [notice] 1#1: start worker process 24
2026/08/06 13:02:42 [notice] 1#1: start worker process 25
2026/08/06 13:02:42 [notice] 1#1: start worker process 26
2026/08/06 13:02:42 [notice] 1#1: start worker process 27
rich@rich-vb-u24:~/pure-php-app$

太棒了!您已經成功把 Nginx 的日誌目錄掛載出來,而且可以順利讀取到 error.log。

但是,這裡出現了一個非常關鍵的時間差問題,如果現在不解決,Fail2ban 之後會完全無法觸發封鎖。

🚨 發現嚴重的時区不一致問題

請對比您的系統時間與日誌時間:


兩者相差了整整 8 小時。對 Fail2ban 來說,當它在 21:04 分去讀取這份日誌時,它會認為這些日誌是「8 小時前發生的陳舊事件」,因而直接忽略,導致防禦完全失效。

🛠️ 最佳解決方案:讓 Docker Nginx 的時區與宿主機同步

最乾淨的解決方法是直接修改 Nginx 容器的時區,讓它也使用台灣時間(CST)。這樣兩邊的日誌時間就會完全對齊。

請修改您的 docker-compose.yml,在 pure-nginx 服務的 environment 欄位加入時區設定,並掛載主機的時間設定:

services:
  pure-nginx:
    # ... 您原本的其他設定 ...
    environment:
      - TZ=Asia/Taipei # 強制容器使用台灣時區
    volumes:
      - /etc/localtime:/etc/localtime:ro # 讓容器同步主機時間檔案
      - /home/rich/pure-php-app/nginx/logs:/var/log/nginx
      - /home/rich/pure-php-app/nginx:/etc/nginx/conf.d
      # ... 您原本的其他掛載 ...

修改完成後,請重啟 Nginx 容器以套用設定:

docker compose down && docker compose up -d

重啟後,請再次執行 cat nginx/logs/error.log,確認新產生的日誌時間開頭是否已經變成 21:xx:xx。


當您的 Nginx 日誌時間成功同步為 21:xx:xx 之後,我們就可以開始寫 Fail2ban 的設定檔了。

接下來,請告訴我: