一、Nginx目录索引模块
1.目录索引模块
ngx_http_autoindex_module模块处理以斜杠字符(’/’)结尾的请求,并生成目录列表。
当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块。
nginx默认是不允许列出整个目录浏览下载。
2.autoindex常用参数
autoindex_exact_size off;
默认单位是bytes,实际大小。修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。修改为on, 显示的文件时间为文件的最后修改时间。
3.中文乱码参数
charset utf-8;
默认中文是乱码,添加该参数可以解决乱码问题
4.目录索引实例
访问www.book.com,出现正常网站页面,访问www.book.com/download,出现目录页面。
server { listen 80; server_name www.book.com; charset utf-8; location / { root /code/book; index index.html index.htm; } location /download { root /code/book; autoindex on; autoindex_exact_size off; autoindex_localtime on; } }
二、Nginx状态监控模块
nginx_http_stub_status_module`模块提供对基本状态信息的访问。
默认情况下不构建此模块,应使用`–with-http_stub_status_module`配置参数启用它
配置实例
server { listen 80; server_name www.book.com; location / { root /code/book; index index.html index.htm; } location /status { stub_status; } }
状态详解:
Active connections: 2 ———– # 当前活动的连接数
server accepts handled requests
373 373 695
Reading: 0 Writing: 1 Waiting: 1
accepts ———– # 当前的总连接数TCP
handled ———– # 成功的连接数TCP
requests ———– # 总的http请求数
Reading ———– # 请求
Writing ———– # 响应
Waiting ———– # 等待的请求数,开启了keepalive
# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接
三、Nginx访问控制模块
基于IP的访问控制模块: http_access_module
1)访问控制配置示例,拒绝指定的IP,其他全部允许
server { listen 80; server_name www.book.com; location / { root /code/book; index index.html index.htm; deny 10.0.0.1; allow all; } }
2) 访问控制配置示例, 只允许谁能访问, 其它全部拒绝
server { listen 80; server_name www.book.com; location / { root /code/book; index index.html index.htm; allow 10.0.0.1; deny all; } }
四、Nginx登陆认证模块
(1).需要安装httpd-tools,该包中携带了htpasswd命令
[root@web01 ~]# yum install httpd-tools
(2).创建新的密码文件, -c创建新文件,相当于覆盖文件 , -b允许命令行输入密码
如果没有加绝对路径那么密码文件必须要放在/etc/nginx/目录下,如果要写其他路径,在配置文件中要写绝对路径
[root@web01 ~]# htpasswd /etc/nginx/auth_conf lx New password: Re-type new password: Updating password for user lx [root@web01 ~]# cat /etc/nginx/auth_conf lx:$apr1$lBjA5o6T$BglppRiHeDJ7U0R/Zo0gh1
(3).编写conf配置文件
server { listen 80; server_name www.book.com; location / { root /code/book; index index.html index.htm; auth_basic "Auth access Blog Input your Passwd!"; auth_basic_user_file auth_conf; }
[root@web01 /etc/nginx/conf.d]# cat host.conf server{ listen 80; server_name www.book.com; location / { root /code/youxi; index index.html; } location /sc { root /code/youxi; index index.html; auth_basic "Auth access Blog Input your Passwd!"; auth_basic_user_file auth_conf; } }
浏览器访问www.book.com可以直接访问,不需要密码认证,但是如果访问www.book.com/sc/index.html 会密码认证。
location 后面的/sc 并不是根目录下的sc,而是浏览器域名输入的/sc,然后把/sc放到下面root对应的/code/youxi/sc,再去下面寻找index.html。
五、Nginx连接限制模块
1.语法
设置限制的空间
调用模块 ,空间里的内容 ,空间=空间名字:空间大小
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
调用上面的空间
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
2.配置
nginx配置文件http层
http { ... ... limit_conn_zone $remote_addr zone=conn_zone:10m; ... ... }
server层:
server { ... ... #设置共享内存区域和设置最大允许连接数。当超过此限制时,服务器将返回 错误 以回复请求。 limit_coon conn_zone 1; }
六、Nginx请求限制模块
1.语法
设置限制请求的空间
模块 空间里保存的内容 空间=空间名称:大小 速率 1r/s
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
调用上面空间
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
2.配置
limit_req_zone $remote_addr zone=req_zone:1m rate=1r/s; server { listen 80; server_name www.host1.com; location / { root /code; index index.html; limit_req zone=req_zone; limit_req_status 412; } }
3.测试请求限制
#ab工具 [root@web02 conf.d]# ab -n 20 -c 2 http://www.host1.com/ Server Software: nginx/1.16.1 Server Hostname: www.host1.com Server Port: 80 Document Path: / Document Length: 581 bytes Concurrency Level: 2 Time taken for tests: 0.007 seconds Complete requests: 20 Failed requests: 19 (Connect: 0, Receive: 0, Length: 19, Exceptions: 0) Write errors: 0 Non-2xx responses: 19 Total transferred: 8125 bytes HTML transferred: 4324 bytes Requests per second: 3056.70 [#/sec] (mean) Time per request: 0.654 [ms] (mean) Time per request: 0.327 [ms] (mean, across all concurrent requests) Transfer rate: 1212.68 [Kbytes/sec] received [root@web02 conf.d]#
七、Nginx location
使用Nginx Location可以控制访问网站的路径,但一个server可以有多个location配置, 多个location的优先级该如何区分。
1.语法
Syntax: location [ = | ~ | ~* | ^~ | / ] uri { ... } location @name { ... } Default: — Context: server, location
2.location匹配符
= 精确匹配 ^~ 以某个字符串开头 ~ 区分大小写的正则匹配 ~* 不区分大小写的正则匹配 / 通用匹配,任何请求都会匹配到
3.验证location匹配顺序
[root@web02 conf.d]# vim testlocation.conf server { listen 80; server_name www.linux.com; #location / { # default_type text/html; # return 200 "location /"; #} location =/ { default_type text/html; return 200 "location =/"; } location ~ / { default_type text/html; return 200 "location ~/"; } location ^~ / { default_type text/html; return 200 "location ^~"; } }