Nginx是一個高性能的WEB服務器,越來越多的用戶使用,如果您的某個站點不希望對外公開(比如PHPMyAdmin),可以使用htpasswd實現Nginx驗證訪問。
安裝htpasswd
htpasswd是Apache密碼生成工具,Nginx支持auth_basic認證,因此我門可以將生成的密碼用於Nginx中,輸入一行命令即可安裝:
yum -y install httpd-tools
參數如下:
-c 創建passwdfile.如果passwdfile 已經存在,那么它會重新寫入並刪去原有內容. -n 不更新passwordfile,直接顯示密碼 -m 使用MD5加密(默認) -d 使用CRYPT加密(默認) -p 使用普通文本格式的密碼 -s 使用SHA加密 -b 命令行中一並輸入用戶名和密碼而不是根據提示輸入密碼,可以看見明文,不需要交互 -D 刪除指定的用戶
生成密碼
#進入home目錄 cd /home #生成密碼 htpasswd -c ./passwd username #執行上命令后會要求輸入兩次密碼,./passwd 是在當前目錄下創建密碼文件passwd ,username即為需要設置的賬號
如果你不想安裝htpasswd,也可以通過在線 htpasswd 生成器來完成。
載入配置
接下來在Nginx配置文件中(通常是server段內),加入如下兩行,並重載Nginx(service nginx reload
)即可生效。
auth_basic "Please input password"; #這里是驗證時的提示信息 auth_basic_user_file /home/passwd;
訪問測試
再訪問站點,提示需要輸入用戶名和密碼才可以訪問,此方法適合不宜公開的站點,比如PHPmyadmin,這樣可避免被弱口令掃描,無疑再上了一把鎖。
實例
利用htpasswd命令添加用戶
htpasswd -bc .passwd www.linuxde.net php
在bin目錄下生成一個.passwd文件,用戶名www.linuxde.net,密碼:php,默認采用MD5加密方式。
在原有密碼文件中增加下一個用戶
htpasswd -b .passwd Jack 123456
去掉-c
選項,即可在第一個用戶之后添加第二個用戶,依此類推。
不更新密碼文件,只顯示加密后的用戶名和密碼
htpasswd -nb Jack 123456
不更新.passwd文件,只在屏幕上輸出用戶名和經過加密后的密碼。
利用htpasswd命令刪除用戶名和密碼
htpasswd -D .passwd Jack
利用htpasswd命令修改密碼
htpasswd -D .passwd Jack htpasswd -b .passwd Jack 123456
即先使用htpasswd刪除命令刪除指定用戶,再利用htpasswd添加用戶命令創建用戶即可實現修改密碼的功能。
實際樣例如下:
nginx配置:
server { listen 80; server_name kba.sche.cn; access_log /home/logs/nginx/kba.sche.cn/access_log main; error_log /home/logs/nginx/kba.sche.cn/error_log; log_not_found on; include conf/*.conf; location / { proxy_pass http://192.168.1.125:500; auth_basic "Basic Authentication"; auth_basic_user_file "/home/nginx/htpasswd/kba.htpasswd"; } }
生成密碼
創建密碼文件並新增用戶 htpasswd -c /home//nginx/htpasswd/kba.htpasswd tom 回車提示輸入兩次設置的密碼 新增其他用戶,默認加密策略 htpasswd -b /home/nginx/htpasswd/kba.htpasswd jack Jk123
重啟nginx 即可。