1. 程式人生 > >nginx反向代理時配置訪問密碼

nginx反向代理時配置訪問密碼

事先 reload color tail -m The 提示 進行 設置

在有些情況下,我們需要對服務器上的某些資源進行限流或者禁止陌生人訪問,我們可以通過nginx配置來對url添加訪問密碼。

效果如下

技術分享圖片

nginx 開啟訪問驗證
在 nginx 下,提供了 ngx_http_auth_basic_module 模塊實現讓用戶只有輸入正確的用戶名密碼才允許訪問web內容。默認情況下,nginx 已經安裝了該模塊。所以整體的一個過程就是先用第三方工具( htpasswd,或者使用 openssl)設置用戶名、密碼(其中密碼已經加過密),然後保存到文件中,接著在 nginx 配置文件中根據之前事先保存的文件開啟訪問驗證。

這裏我們以 htpasswd為例
1、安裝 htpasswd 工具

[root@master ~]# yum install -y httpd-tools
設置用戶名和密碼,並把用戶名、密碼保存到指定文件中:
[root@master ~]# mkdir -p /usr/local/src/nginx/
[root@master ~]# htpasswd -c /usr/local/src/nginx/passwd sue
New password:
Re-type new password:
Adding password for user sue
註意:上面的 /usr/local/src/nginx/passwd 是生成密碼文件的路徑,然後sue 是用戶名,你可以根據需要自行設置成其它用戶名。運行命令後,會要求你連續輸入兩次密碼。輸入成功後,會提示已經為sue這個用戶添加了密碼。

查看下生成的密碼文件的內容:
[root@master ~]# cat /usr/local/src/nginx/passwd
sue:$apr1$bj22mciQ$4Rq6U1EnZPyxmDj5X8v1d/
其中用戶名就是sue,分號後面就是密碼(已經加過密)。

2、修改 nginx 配置文件
找到 nginx 配置文件,因為我們要對整個站點開啟驗證,所以在配置文件中的第一個server修改如下:

server {
listen 80;
server_name localhost;
.......
#新增下面兩行
auth_basic "Please input password"; #這裏是驗證時的提示信息
auth_basic_user_file /usr/local/src/nginx/passwd;
location /{
.......
}

然後重啟 nginx:
[root@master ~]# ./nginx -t
nginx: the configuration file /usr/local/src/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/src/nginx/conf/nginx.conf test is successful
[root@master ~]# ./nginx -s reload
以上都配置無誤後,你重新訪問你的站點,如果出現需要身份驗證的彈窗就說明修改成功了。

3、htpasswd 命令
htpasswd選項參數
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
htpasswd命令選項參數說明
-c 創建一個加密文件
-n 不更新加密文件,只將htpasswd命令加密後的用戶名密碼顯示在屏幕上
-m 默認htpassswd命令采用MD5算法對密碼進行加密
-d htpassswd命令采用CRYPT算法對密碼進行加密
-p htpassswd命令不對密碼進行進行加密,即明文密碼
-s htpassswd命令采用SHA算法對密碼進行加密
-b htpassswd命令行中一並輸入用戶名和密碼而不是根據提示輸入密碼
-D 刪除指定的用戶
htpasswd例子
a、如何利用htpasswd命令添加用戶?
htpasswd -bc ./.passwd sue pass
在當前目錄下生成一個.passwd文件,用戶名sue,密碼:pass,默認采用MD5加密方式
b、如何在原有密碼文件中增加下一個用戶?
htpasswd -b ./.passwd sue1 pass
去掉c選項,即可在第一個用戶之後添加第二個用戶,依此類推
c、如何不更新密碼文件,只顯示加密後的用戶名和密碼?
htpasswd -nb sue pass
不更新.passwd文件,只在屏幕上輸出用戶名和經過加密後的密碼
d、如何利用htpasswd命令刪除用戶名和密碼?
htpasswd -D .passwd sue1
e、如何利用 htpasswd 命令修改密碼?
htpasswd -D .passwd sue1
htpasswd -b .passwd sue1 pass


原文

nginx反向代理時配置訪問密碼