24、基于IP配置Nginx的访问权限
Nginx配置通过2种途径支持基本访问权限的控制,其中一种是由HTTP标准模块ngx_http_access_module支持的,其通过IP来判断客户端是否拥有对Nginx的访问权限,这里有2个指令需要学习。
allow指令,用于设置运行访问Nginx的客户端IP,语法为:

allow address | CIDR | all;

address,允许访问的客户端的IP,不支持同事设置多个。如果有多个IP需要设置,需要重复使用allow指令。
CIDR,允许访问客户端的CIDR地址,例如202.80.18.23/25,前面 是32位IP地址,后面“/25”代表IP地址中前25位是网络部分,其余位代表主机部分。
all,代表允许所有客户端访问。
另外一个指令是deny,作用刚好和allow指令相反,它用于设置禁止访问Nginx的客户端IP,语法结构为:

deny address | CIDR | all;

这2个指令可以在http块、server块或者location块中配置。使用这2个指令时,需要注意设置为all的用法,看以下示例:

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
deny all;
}

指令从上至下执行,当有客户端连接匹配时,遇到匹配的配置时,则停止向下搜索相关配置。

25、基于密码配置Nginx的访问权限
Nginx还支持基于HTTP Basic Authentication协议的认证。该协议是一种HTTP性质的认证办法,需要识别用户名和密码,认证失败的客户端不拥有访问Nginx服务器的权限。该功能由HTTP标准模块ngx_http_auth_basic_module支持,这里有2个指令需要学习。
auth_basic指令,用于开启或者关闭该认证功能,语法为:

auth_basic sting | off;

sting,开启该认证功能,并配置验证时的指示信息。
off,关闭该认证功能。
auth_basic_user_file指令,用于设置包含用户名和密码信息的文件路径,语法为:

auth_basic_user_file file;

其中file文件为密码文件的绝对路径。这里的密码文件支持明文或者加密后的文件。明文格式如下:

name1:password1
name2:password2:comment
name3:password3

加密密码可以使用crypt()函数进行密码加密的格式,在Linux平台上可以使用htpasswd命令的一个示例:

#htpassword -c -d /naginx/conf/pass_file username //运行后输入密码即可。

26、Nginx服务器基础配置实例
一个完整的Nginx.conf配置文件:

###全局块 开始###

user nobody nobody;                                    #配置允许运行Nginx服务器的用户和用户组

worker_processes 3;                                    #配置允许Nginx进程生成的worker process数

error_log logs/error.log                               #配置Nginx服务器运行的错误日志存放路径

pid nginx.pid                                          #配置Nginx服务器运行时的pid文件存放路径和名称

####全局模块 结束####

###events块 开始###

events
{
     use epoll;                                        #配置事件驱动模型
     worker_connections 1024;                          #配置最大连接数
}

####events块 结束####

###http块 开始###

http {
     include mime.types;                               #定义MIME-TYPE
     default_type application/octet-stream;          
  
     sendfile on;                                      #配置允许使用sendfile方式传输
     keepalive_timeout 65;                             #配置连接超时时间
     log_format access_log '$remote_addr-[$time_local]-"$request"-"$http_user_agent"';     #配置请求处理日志的格式
   
     ###server块 开始###
     server {                                          #配置虚拟机主机myserver1
          listen 8081;                                 #配置监听端口和主机名称(基于名称)
          server_name myServer1;
        
          access_log /myweb/server1/log/access.log;    #配置错误页面
          error_page 404 /404.html;                  

          location /server1/location {                 #配置处理/server1/location1请求的location
               root /myweb;
               index index.svr1-loc1.htm;
          }
        
          location /server1/location2 {                #配置处理/server1/location2请求的location
               root /myweb;
               index index.srv-loc2.htm;
          }
     }

     server {                                          #配置虚拟主机myserver2
          listen 8082;
          server_name 192.168.1.3;
          access_log /myweb/server2/log/access.log;
          error_page 404 /404.html;                    #对错误页面404.html做了定向配置
        
          location /server2/location1 {
               root /myweb;
               index index.srv2-loc1.htm;
          }
        
          location /svr2/loc2 {
               alias /myweb/server2/location2/;         #对location的URI进行更改
               index index.ser2-loc2.htm;
          }

          location = /404.html {                        #配置错误页面转向
               root /myweb/;
               index 404.html;
          }
     }
     ###server块 结束###
}
####http块 结束####

该示例中,我们配置了2个虚拟主机myserver1和myserver2,前者是基于名称的,后者是基于IP的。在每一个虚拟主机里,笔者有分别使用了location块对不同请求进行处理。主机myserver2除了对一般的请求进行处理外,还对错误页面404.html做了定向配置,指向笔者自定义的404处理页面。



最后修改:2021 年 02 月 02 日
如果觉得我的文章对你有用,请随意赞赏