如何透過 Nginx Proxy Manager 限制 WordPress 特定管理路徑的存取

WordPress 是全球廣泛使用的網站內容管理系統,因此像 /wp-admin/、/wp-login.php 這類管理入口也相當容易被辨識。當網站直接開放至 Internet 後,這些路徑可能持續遭遇自動化掃描、暴力破解密碼或其他針對登入頁面的攻擊。

如果平常只會從家中、公司或其他固定網路環境管理 WordPress,其實沒有必要讓所有 Internet 使用者都能連線至管理入口。

透過 Nginx Proxy Manager 限制特定來源 IP 才能存取 /wp-admin/ 與 /wp-login.php,可以在請求抵達 WordPress 登入頁面之前就先阻擋不符合條件的連線,進一步縮小網站的對外攻擊面。

Access List

Access List 可以用來限制哪些來源可以透過 Nginx Proxy Manager 存取網站,例如只允許公司或家中的固定 IP 連線。

設定完成後,只要在 Proxy Host 的 Access List 選擇對應規則,Nginx Proxy Manager 就會依照允許或拒絕的 IP 範圍進行存取控制。

不過需要注意,Access List 套用的是整個 Proxy Host。如果我們只希望限制 WordPress 的 /wp-admin/、/wp-login.php 等特定管理路徑,而網站前台仍允許所有人瀏覽,就不適合直接對整個 Proxy Host 套用 Access List。

這種情況可以改用 Custom Locations 或進階 Nginx 設定,針對特定路徑限制來源 IP。

Custom Locations

Custom Locations 是用來針對特定 URL 路徑設定不同代理規則的功能,我們可能只想針對某些路徑進行額外控制,例如 WordPress 的 /wp-admin/ 管理後台或 /wp-login.php 登入頁面。

我們可以為這些路徑個別指定轉送位置,並加入額外的 Nginx 設定,例如限制來源 IP。如此一來,網站前台仍可正常對 Internet 開放,但 WordPress 的管理入口則只允許家中、公司或其他指定 IP 存取。

例如 WordPress 的 /wp-admin/ 管理後台或 /wp-login.php 登入頁面。

  • Location:/wp-admin 與 /wp-login.php
  • Scheme:HTTP
  • Forward Hostname / IP:您的 WordPress IP 與 Forward Port

接著在該 Location 的進階設定加入,點選 Save。

allow 192.168.0.0/24;
deny all;

若有非指定 IP 嘗試存取 /wp-admin/ 管理後台或 /wp-login.php 登入頁面,則會顯示 403 Forbidden 狀態碼。代表伺服器了解你的請求,但因為權限不足或安全設定而拒絕執行。

這樣就能做到網站前台完全公開,可讓所有訪客瀏覽。而管理路徑則會在 Nginx Proxy Manager 這一層先進行存取控制,不符合條件的連線不必等到 WordPress 登入驗證就會被阻擋,有助於縮小管理介面的對外攻擊面。

今天的分享就到這邊,感謝收看。