(一):Nginx的目录索引
1:当用户访问Nginx搭建的网站,当网站的location中定义的/路径中的index.html页面找不到,那么就会报Not found错误,所以创建目录索引就是解决这个问题的,当用户访问不到html页面时,Nginx会根据自己设置的索引返回一个目录列表!
也可以配置内网YUM仓库
例如:
首先需要设置索引语法,这里可以看一下官方文档
2:先进入/etc/nginx/conf.d中
创建一个新的配置文件
再在/code1中创建10个文件,查看效果
网页效果如下图
3:如果想实现,输入域名能看到页面,但是在域名后加一个down就会显示文件目录,怎么做呢?
首先需要新建两个location
(二):Nginx的访问控制
比如除了10.0.0.1这个地址不能访问我,其他所有地址都能访问我
deny 10.0.0.1/32
allow all;
比如只允许10.0.0.1这个地址能够访问我,其他所有的地址都不能访问我
allow 10.0.0.1/32;
deny all;
如果是希望整个网段可以访问我
10.0.0.0/24;
本机的地址改为10.0.0.100后
在配置文件里面写入控制访问语句,并重启nginx
再次访问这个down目录就会被拒绝
(三):Nginx的资源限制
资源限制也就是设置验证,用户想访问我后台,那么就需要输入用户名和密码才可以进入,通常和访问控制一起设置,双安全认证
首先看一下设置密码的格式
location / {
auth_basic "closed site"; #描述信息
auth_basic_user_file 路径;
}
验证的密码放在一个文件里面,和rsync守护进程类似
密码里面的书写格式是,并且密码必须是进过加密的,所以可以使用htpasswd进行加密
username:password
所以下载htpasswd密码加密包
yum -y install httpd-tools
使用htpasswd的-c参数创建密码文件,并设置用户名和密码
htpasswd -c /etc/nginx/auth_conf oldboy 回车
输入密码
再写入配置文件中
再在浏览器上进行访问,就会提示输入密码
(四):Nginx的状态监控
会记录多少人访问我,连接我,请求我
使用stub_status模块,但是这种一般需要直接编译才可以使用
所以yum安装的需要使用nginx -V查看有没有这个模块,有就直接使用
location /nginx_status {
stub_status;
}
然后进入浏览器输入、地址/nginx_status 就可以看到,也叫nginx的七种状态
失败的连接数是总的TCP连接数减去以处理的请求accepts-handled
也可以使用httpd软件包自带的模拟请求工具ab命令 -c是并发,-n请求数
ab -n1000 -c100 http://10.0.0.7/nginx_status
一般这种状态监控不会给外人访问,给测试人员本地查看即可,所以要加本地访问规则
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
然后使用curl命令去访问
curl 127.0.0.1/nginx_status
一般企业会进行对curl命令结果进行取值,从而进行监控
(五):Nginx的访问限制
针对大流量访问,恶意访问,带来的影响是严重消耗带宽,需要采取措施进行限制
主要针对连接数限制,和请求数进行限制
1:对连接数限制:对连接数限制并不是特别有效,因为一个连接建立可以包含多个请求,还是无法进行对资源获取的限制
首先进行设定指令,语法如下,
其中key表示日志中记录到的访问地址,一般key=$remote_addr或者也可以写$binary_remote_addr,二者的区别就是占用的字节大小不一样,前者占用15个字节,后者占用4个字节左右!
name表示自己定义的指令名称,
size表示在内存中开辟的内存大小
limit_conn_zone key zone=name:size; 指令只能在http中设定
设定完指令后进行调用,语法如下,其中number表示限制的最大连接数是多少,超过这个值,那就直接返回503错误
limit_conn zone number; 调用指令可以在http,server,location中使用
2:对请求数限制:对请求数限制是使用最多的
首先进行设定指令,语法如下
其中rate表示每秒请求速率
limit_req_zone key zone=name:size rate=rate; 只能在http下定义
定义好后然后调用
limit_req zone=req_zone; 也是可以在http,server,location中使用
在浏览器页面进行Ctrl+f5强制刷新,会变成大面积报错,只有一个成功
所以还有几个参数需要介绍一下
定义时加上这几个参数
limit_req zone=req_zone burst=3 nodelay;
其中burst=3表示同一时刻请求时,延迟增加处理三个,nodelay表示直接返回503错误,这也就相当于一秒钟请求4个,原来是1个
(六):Nginx Location(重要)
location匹配的优先级 = > ^~ > ~ > ~* > /