需要保護敏感目錄(如 phpMyAdmin、後台管理)時,無需開發獨立認證系統。Apache 內建的 mod_auth_basic 配合 .htaccess 即可實現輕量級訪問控制,適合中小型項目快速部署。
編輯 httpd.conf,在目標目錄(如 /usr/local/apache/htdocs)的 <Directory> 區塊添加:
<Directory "/usr/local/apache/htdocs">
AllowOverride All
# 其他原有配置保持不變
</Directory>
AllowOverride All 允許子目錄通過 .htaccess 覆蓋父級訪問控制設置。
使用 Apache 自帶的 htpasswd 工具生成加密密碼文件:
# 創建新文件並添加用戶 admin
htpasswd -c /usr/local/apache/pass/pwdPhp admin
# 追加用戶 guest
htpasswd /usr/local/apache/pass/pwdPhp guest
生成文件示例:
admin:a0Hplbj33QjV2
guest:R0BYSO383QjVT
密碼經過 crypt() 加密,不可逆,相對安全。
在受保護目錄(如 /usr/local/apache/htdocs/phpmyadmin/.htaccess)創建文件:
AuthType Basic
AuthName "Database Security Zone"
AuthUserFile /usr/local/apache/pass/pwdPhp
Require valid-user
# 可選:自定義 401 錯誤頁面
ErrorDocument 401 /catchErrors/err_401.html
| 指令 | 說明 |
|---|---|
| AuthType Basic | 採用 HTTP Basic 認證(Base64 編碼,建議配合 HTTPS) |
| AuthName | 瀏覽器彈窗顯示的提示信息 |
| AuthUserFile | 密碼文件絕對路徑,需 Apache 進程可讀 |
| Require valid-user | 允許密碼文件中任意合法用戶 |
| Require user admin | 僅允許指定用戶(替代 valid-user) |
/usr/local/apache/bin/apachectl restart
創建組文件 /usr/local/apache/pass/groups:
admins: admin root
devs: dev1 dev2
.htaccess 中引用:
AuthGroupFile /usr/local/apache/pass/groups
Require group admins
各子目錄放置不同 .htaccess,實現細粒度控制:
/htdocs/admin/.htaccess → Require group admins
/htdocs/dev/.htaccess → Require group devs
/htdocs/public/.htaccess → 無限制(或刪除文件)
mod_evasive 或 Fail2ban 限制嘗試次數chmod 640、屬主 root:www| 現象 | 原因 | 解決 |
|---|---|---|
| 瀏覽器不彈窗直接 403 | AllowOverride 未生效 | 檢查 httpd.conf 配置語法、確認目錄路徑正確 |
| 輸入正確密碼仍失敗 | 密碼文件路徑錯誤或格式問題 | 用 htpasswd -v 驗證、確認絕對路徑 |
| .htaccess 被瀏覽器下載 | 未設置 AccessFileName 或 MIME 類型 | 確認 httpd.conf 含 AccessFileName .htaccess |
Apache .htaccess 訪問控制無需重啟主服務即時生效,適合共享主機、快速原型、內網工具等場景。生產環境建議配合 HTTPS、強密碼策略、日誌審計構建纵深防禦體系。