基於IP配置Nginx的訪問權限
Nginx配置通過兩種途徑支持基本訪問權限的控制,其中一種是由HTTP標准模塊ngx_http_access_module支持的,通過IP來判斷客戶端是否擁有對Nginx的訪問權限,這里包括兩個指令:
allow指令,用於設置允許訪問Nginx的客戶端IP;
allow address | CIDR | all
#address,允許訪問的客戶端IP,不支持同時設置多個。如果有多個IP需要設置,需要重復使用allow指令
#CIDR,允許訪問的客戶端的CIDR地址,例如 172.10.10.1/100,前面是32位IP地址,后面“\25”代表該IP地址中前25位是網絡部分,其余位代表主機部分。
#all,代表允許所有客戶端訪問。
從Nginx 0.8.22版本后,該命令也支持IPv6地址,比如:
allow 2620:100:e000::8001;
deny指令,與allow正好相反,用於設置禁止訪問Nginx客戶端IP
deny address | CIDR | all;
這兩個指令可以在http塊、server塊或者location塊中配置。
1 location / { 2 deny 192.168.1.1; 3 allow 192.168.1.0/24; 4 deny all; 5 }
在以上例子中192.168.1.0/24客戶端是可以訪問的。因為,Nginx配置在解析的過程中,遇到deny指令或者allow指令是按照順序對當前客戶端的連接進行訪問權限檢查的。如果遇到匹配的配置時,則停止繼續向下搜索相關配置。因此,當192.168.1.0/24客戶端訪問時,Nginx在第三行解析配置發現允許該客戶端訪問,就不會繼續向下解析第4行了。
基於密碼配置Nginx的訪問權限
Nginx 還支持基於HTTP Basic Authentication 協議的認證。該協議是一種 HTTP 性質的認證辦法,需要識別用戶名和密碼,認證失敗的客戶端不擁有訪問Nginx服務器的權限。該功能由 HTTP 標准模塊 ngx_http_auth_basic_module 支持,這里有兩個指令需要學習。
auth_basic指令,用於開啟或者關閉該認證功能,語法結構為:
auth_basic string | off;
其中,file為密碼文件的絕對路徑。
這里的密碼文件支持明文或者密碼加密后的文件。明文的格式如下所示:
1 name1:password1 2 name2:password2:comment 3 name3:password3
加密密碼可以使用crypt()函數進行密碼加密的格式,也可使用htpasswd命令生成:
htppasswd d:\nginx\conf\htpasswd username
myzhao是認證的賬戶名稱,需要輸入兩次密碼,然后htppasswd文件中保存的就是加密后的密碼:
htppasswd(第三個冒號后可做注釋也可沒有):
myzhao:$apr1$JAVltvyq$4k0V5tWy0Ec0JI5eiZrfJ.:123456
5、6兩行此次新增的配置:
1 location /software { 2 autoindex on; 3 autoindex_exact_size off; 4 autoindex_localtime on; 5 auth_basic "Restricted"; 6 auth_basic_user_file htpasswd; 7 }