Web进阶Nginx常用模块

Web进阶Nginx常用模块

Nginx 目录索引模块:ngx_http_autoindex_module

目录索引模块简述

ngx_http_autoindex_module 模块处理以斜杠字符('/')结尾的请求,并生成目录列表。
当ngx_http_index_module 模块找不到索引文件时,通常会将请求传递给 ngx_http_autoindex_module 模块。

autoindex语法

Syntax: autoindex on | off;
Default:
autoindex off;
Context: http, server, location

例:
server{
     # 监听80端口
     listen 80;
     # 指定访问的域名
     server_name game.drz.com;
     # 配置URL
     location / {
     # 站点目录
           root /code/h5_games;
     # 指定主页面
           autoindex on;
      }
} 

autoindex的优化

server{
        # 监听80端口
        listen 80;
        # 指定访问的域名
        server_name game.drz.com;
        # 配置URL
        location / {
        # 站点目录
                  root /code/h5_games;
        # 指定主页面
                  autoindex on;
                  ## 修改时间为当前系统时间(不使用格林威治时间)
                  autoindex_localtime on;
                  ## 显示文件大小(显示单位)
                  autoindex_exact_size off;
         }
}

Nginx的状态模块:ngx_http_stub_status_module

ngx_http_stub_status_module模块提供对基本状态信息的访问。
默认情况下不构建此模块,应使用--with-http_stub_status_module配置参数启用它

配置

Syntax: stub_status;
Default: —
Context: server, location

配置Nginx status示例

状态模块,需要配置URL
server{
        # 监听80端口
        listen 80;
        # 指定访问的域名
        server_name game.drz.com;
        # 配置URL
        location / {
        # 站点目录
                  root /code/h5_games;
        # 指定主页面
                  autoindex on;
                  ## 修改时间为当前系统时间(不使用格林威治时间)
                  autoindex_localtime on;
                  ## 显示文件大小(显示单位)
                  autoindex_exact_size off;
         }
         location /nginx_status {
         ## 开启
              stub_status;
         }
}

image

Active connections   # 当前活动的连接数
accepts              # 当前的总连接数TCP
handled              # 成功的连接数TCP
requests             # 总的http请求数

Reading              # 请求
Writing              # 响应
Waiting              # 等待的请求数,开启了keepalive

# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接

Nginx访问控制模块

  • 基于IP的访问控制 http_access_module
## 配置方法(通常allow和deny一起使用)
location / {
      #允许访问
      allow IP或者网段;
      # 拒绝访问
      deny IP或者网段,all;
}

例:
location / {
     ## 允许单个IP访问
     allow 10.0.0.1;
     ## 允许一个网段访问
     allow 10.0.0.0/24;
     ## 拒绝所有
     deny all;
}
  • 基于用户登陆认证 http_auth_basic_module
## 页面需要用户认证,使用htpasswd命令
# 1.安装httpd-tools工具
[root@web02 auth]# yum install -y httpd-tools

# 2.创建认证用户目录
[root@web02 auth]# mkdir /etc/nginx/auth

# 3.创建一个用户名和密码
[root@web02 auth]# htpasswd -b -c /etc/nginx/auth/zls_auth zls 123
Adding password for user zls

location /cc {
		root /code/auth;
		index index.html;
		auth_basic "ruozhi ni cai bu dao";
		auth_basic_user_file /etc/nginx/auth/zls_auth;
}

htpasswd -b -c 密码文件路径 用户名 密码
 -c创建新文件 
 -b允许命令行输入密码

Nginx的访问限制模块

在企业中经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问, 会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,请求数、进行限制。

ngx_http_limit_conn_module 模块可以根据定义的key来限制每个键值的连接数,如同一个IP来源的连接数。
limit_conn_module  连接频率限制
limit_req_module   请求频率限制
  • ngx_http_limit_conn_module (限制连接数)
http{
	...
	## http层设置,针对远端的IP开辟一块内存空间,空间名称=zls_zone:空间大小1m
	limit_conn_zone $remote_addr zone=zls_zone:1m;
	...
	
	server{
		...
		## server层调用,允许同时最高2个IP访问
		limit_conn zls_zone 2;
		...
	}
}
  • ngx_http_limit_req_module (限制请求频率)
http{
	...
	## 请求频率限制
	limit_req_zone $binary_remote_addr zone=suibian:1m rate=1r/s;
	...
	
	server{
	...
		location / {
			limit_req zone=suibian burst=2 nodelay;
		}
	}
}

## http层设置
[root@web02 conf.d]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;

events {
	worker_connections 1024;
}

http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	log_format main '$remote_addr - $remote_user [$time_local] "$request" '
					'$status $body_bytes_sent "$http_referer" '
					'"$http_user_agent" "$http_x_forwarded_for"';
					
	access_log /var/log/nginx/access.log main;	
    
    sendfile on;
	#tcp_nopush on;
	keepalive_timeout 65;

	#gzip on;
	## 连接数限制
	limit_conn_zone $remote_addr zone=zls_zone:1m;
	## 请求频率限制
	limit_req_zone $binary_remote_addr zone=suibian:1m rate=1r/s;
	
	include /etc/nginx/conf.d/*.conf;
}

## server层或者location层调用
[root@web02 conf.d]# cat /etc/nginx/conf.d/game.drz.com.conf
server{
	# 监听80端口
	listen 80;
	# 指定访问的域名
	server_name game.drz.com;
	limit_req zone=suibian burst=2 nodelay;
	# 配置URL
	location / {
	# 站点目录
		root /code/h5_games;
	# 指定主页面
		autoindex on;
		autoindex_localtime on;
		autoindex_exact_size off
	}
	location /aa {	
		stub_status;
		allow 10.0.0.1;
		deny all;
	}
    location /bb {
		default_type text/html;
		return 200 "tz";
    }
    location /cc {
		root /code/auth;
		index index.html;
		auth_basic "ruozhi ni cai bu dao";
		auth_basic_user_file /etc/nginx/auth/zls_auth;
	}
}	

Nginx Location

使用Nginx Location可以控制访问网站的路径,但一个server可以有多个location配置, 多个location的优先级该如何区分。

Location语法优先级排列
匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 4
!~ 区分大小写不匹配的正则 5
!~* 不区分大小写不匹配的正则 6
/ 通用匹配,任何请求都会匹配到 7
posted @ 2021-08-07 11:33  平凡的人不平凡的事  阅读(45)  评论(0编辑  收藏  举报