nginx常用模块

  • 1.nginx 开启目录索引功能
  • 2.nginx 实现访问控制功能
  • 3.nginx通过账户登陆实现访问控制
  • 4.nginx请求限制
  • 5.nginx连接限制
  • 6.nginx限速,下载限速
  • 7.nginx的七种状态指标
  • 8.nginx的location匹配优先级
  • 9.nginx 日志


1.nginx 开启目录索引功能

1.编辑配置文件
vim /etc/nginx/conf.d/index.conf

server{
		listen 80;
		server_name www.test.com;
		root /html;

		location / {
			index index.html;
		}

		location /test {                #第一个索引目录
			autoindex on;			    #开启目录索引
			autoindex_exact_size off;	#显示具体大小
			autoindex_localtime on;	    #使用本地时间

		}


	    location /test {                #第二个索引目录
			autoindex on;			    #开启目录索引
			autoindex_exact_size off;	#显示具体大小
			autoindex_localtime on;	    #使用本地时间

		}

}

2.初始化本地目录文件

mkdir /html/{test,test1} -p #创建索引目录
touch /html/test/file{1..5} #创建目录下的文件
touch /html/test1/file{5..9} #创建目录下的文件
echo "this is test">/html/index.html #创建默认返回的html页面

3.做本地域名劫持
192.168.xx.xxx www.test.com

4.nginx语法检测,重载nginx

nginx -t
systemctl reload nginx

5.查看测试结果

访问www.test.com,返回默认页面

Nginx index文件位置 nginx index on_html


访问www.test.com/test目录

Nginx index文件位置 nginx index on_nginx_02


访问www.test.com/test1目录

Nginx index文件位置 nginx index on_服务器_03

/html/index.html;
1.如果找到了则直接返回。
2.如果找不到,将这个请求auto_index模块 ( 将当前目录直接以列表形式返回给客户端 )
3.返回错误。403 ( 权限不足、找不到默认返回的主页。)

2.nginx 实现访问控制功能

允许策略

allow 192.168.10.100;  #允许单个主机访问,其他都拒绝		
deny all;

allow 192.168.10.0/24;  #一个网段192.168.10.0/24访问,其他都拒绝	
deny all;

拒绝策略

deny 192.168.10.100; #拒绝192.168.10.100访问,其余全部允许:
allow all;

1.编辑配置文件
vim /etc/nginx/conf.d/index.conf

server{
		listen 80;
		server_name www.test.com;
		root /html;

		location / {
			index index.html;
		}

		location /test {                #第一个索引目录
			autoindex on;			    #开启目录索引
			autoindex_exact_size off;	#显示具体大小
			autoindex_localtime on;	    #使用本地时间

		 	allow 192.168.x.xxx;	#允许访问该目录的IP
			deny all;				#除此IP外其他的所有IP都拒绝访问

		}

}

2.语法检测,重载nginx

nginx -t
systemctl reload nginx

3.这里拿Linux系统进行测试
curl -HHost:www.test.com http://192.168.xx.xxx/test/ 请求www.test.com/test地址,同时告诉192.168.51.xx.xxx 请求的域名是 www.test.com

不被允许访问的结果

Nginx index文件位置 nginx index on_运维_04


被允许访问的结果

Nginx index文件位置 nginx index on_服务器_05

3.nginx通过账户登陆实现访问控制

1.安装httpd-tools
install httpd-tools -y

2.创建一个加密文件,且在命令行中一并输入用户名和密码,而不是根据提示输入密码

htpasswd -b -c /etc/nginx/auth_conf oldwang 123456

/etc/nginx/auth_conf:加密文件路径
oldwang:用户
123456:密码

会提示:Adding password for user oldwang
htpasswd参数:
-c: 创建加密文件
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。

3.编辑配置文件

server{
	listen 80;
	server_name www.test.com;
	root /html;

	location / {
		index index.html;


	}

	location /test {
				autoindex on;
                autoindex_exact_size on;
                autoindex_localtime on;

                auth_basic "访问控制测试";  #描述,随便写,但是不能不写
				auth_basic_user_file /etc/nginx/auth_conf; #读取文件中的用户名和密码进行校验
	}

}

4.语法检测,重载nginx

nginx -t
systemctl reload nginx

5.查看测试结果

访问www.test.com/test提示需要密码验证

Nginx index文件位置 nginx index on_运维_06

4.nginx请求限制

1.修改nginx主配置文件,添加一条请求规则
vim /etc/nginx/nginx.conf

http {
    limit_req_zone $binary_remote_addr zone=testzone:10m rate=1r/s;
    #开辟一个名字叫testzone的区域,区域大小10m,规则是限制每秒1个请求,针对来源的客户端IP限制。
    ...

2.编写nginx配置文件

server{
	listen 80;
	server_name www.test.com;
	root /html;

	location / {
		index index.html;
		limit_req zone=testzone burst=4;  #调用testzone的规则,就是每s1个请求,允许缓存4个请求。超过4个则报错。

	}

}

3.语法检测,重载nginx

nginx -t
systemctl reload nginx

4.查看测试结果

一秒内刷新超过4次就会报错

Nginx index文件位置 nginx index on_服务器_07

5.nginx连接限制

1.修改nginx主配置文件,添加一条连接规则

http {
    limit_conn_zone $binary_remote_addr zone=newzone:10m;
    ...
    }

2.编写nginx配置文件

server{
	listen 80;
	server_name www.test.com;
	root /html;

	location /test1 {
		autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
		limit_conn newzone 1; #仅允许用户同一时刻下载一个资源,如果连续下载2个资源,第二个资源下载报错

	}
}

3.语法检测,重载nginx

nginx -t
systemctl reload nginx

4.查看测试结果

点击资源进行下载,下载过程中再点击资源,就会报错

Nginx index文件位置 nginx index on_html_08

6.nginx限速,下载限速

1.编写nginx配置文件

server{
	listen 80;
	server_name www.test.com;
	root /html;

	location /test1 {
		autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
	
		limit_rate_after 5m;    #前5m下载不限速
		limit_rate 10k;      #超过5m后开始限速10kb
		 client_max_body_size 10m;        #修改上传限制,nginx允许最大的上传限制默认1M


	}
}

2.语法检测,重载nginx

nginx -t
systemctl reload nginx

3.查看测试结果

前5M没有限速的效果

Nginx index文件位置 nginx index on_html_09


超过5M后,开始限速的效果

Nginx index文件位置 nginx index on_nginx_10

7.nginx的七种状态指标

1.编写nginx配置文件

server{
	listen 80;
	server_name www.test.com;
	root /html;

	location / {
		index index.html;
		limit_req zone=testzone burst=4;

	}

	location /ngx_status {
		stub_status;      #展示nginx种状态指标
	}

}

2.语法检测,重载nginx

nginx -t
systemctl reload nginx

3.查看测试结果

Nginx index文件位置 nginx index on_html_11

Active connections 当前的活跃连接数 ( 包含 waiting )
accepts	已接收的TCP连接数。
handled 已处理的TCP连接数。
requests 总的HTTP请求数。  (请求数大于连接数是正常的,因为一个连接可以创建多个请求)
Reading: nginx 读取到客户端的Header信息数
Writing: nginx 返回给客户端的Header信息数
Waiting: Nginx已经处理完,正在等候下一次请求指令的驻留链接
8.nginx的location匹配优先级
匹配符  匹配规则                  优先级
=      精确匹配                   1 
^~     以某个字符串开头             2
~      区分大小写的正则匹配          3
~*     不区分大小写的正则匹配        4
/      通用匹配,任何请求都会匹配到   5

例:

server {
    listen 80;
    server_name www.test.com;

    # 通用匹配,任何请求都会匹配到
    location / {
        root html;
        index index.html;
    }

    # 精准匹配,必须请求的uri是/nginx_status
    location = /nginx_status {
        stub_status;
    }

    # 严格区分大小写,匹配以.php结尾的都走这个location    
    location ~ \.php$ {
        default_type text/html;
        return 200 'php访问成功';
    }

    # 严格区分大小写,匹配以.jsp结尾的都走这个location 
    location ~ \.jsp$ {
        default_type text/html;
        return 200 'jsp访问成功';
    }

    # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location
    location ~* \.(jpg|gif|png|js|css)$ {
        return 403;
    }

    # 不区分大小写匹配
    location ~* \.(sql|bak|tgz|tar.gz|.git)$ {
        deny all;
    }

    #URI中,以某个字符串开头的会被匹配到
	location ^~ /images/ {
        default_type text/html;
        return 200 'location ^~ /images/';
    }
}
9.nginx 日志

访问日志access_log

#定义日志格式 
    变量   = 值
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


	#定义日志存储路径,日志的格式按照main定义好的格式存储。
    access_log  /var/log/nginx/access.log  main;

自定义日志格式

log_format  test  '$remote_addr -  [$time_local] "$request" $status ';

access_log  /var/log/nginx/access.log test;

日志调用
access_log 处于http层,是针对所有网站的,所有的网站日志都存储在同一个位置。

http {
	access_log  /var/log/nginx/access.log  main;

server {								#这个站点的日志全部都打到www.test.com.log
	access_log /var/log/nginx/www.test.com.log main;
 }
}

如果在server层没有定义日志的规则,那么就按照http层定义的日志规则执行
如果在server层定义了日志的规则,那么优先执行server层的规则

error_log错误日志

注意观察 [error] 这样字眼的

Nginx index文件位置 nginx index on_服务器_12


过滤Nginx错误日志:

grep -i "\[error\]" /var/log/nginx/error.log
grep -i "\[error\]" /var/log/nginx/error.log  > ~/1.txt