Nginx常用模块

Nginx虚拟主机

1.虚拟主机方式

  • 基于多IP的方式
  • 基于多端口的方式
  • 基于多域名的方式

2.基于多IP的方式

[root@web02 conf.d]# cat game.conf 
server {
    listen 80;
    server_name 192.168.15.8;
    location / {
		root /opt/Super_Mary;
        index index.html;
    }
}
server {
    listen 80;
    server_name 172.16.1.8;
    location / {
        root /opt/xaingqi;
        index index.html;
    }
}    # 在网页端输入192.168.15.8进入的是超级玛丽,输入172.16.1.8进入的是象棋

3.基于多端口的方式

[root@web02 conf.d]# cat game1.conf 
server {
        listen 80;
        server_name game001.com;
        location / {
        root /opt/Super_Mary;
        index index.html;
        }
}
server {
        listen 81;
        server_name game001.com;
        location / {
        root /opt/xiangqi;
        index index.html;
        }
}  # 在网页端输入game001.com:80进入的是超级玛丽,输入game001.com:81进入的是象棋(要在hosts修改域名)

4.基于多域名的方式

[root@web02 conf.d]# cat game2.conf 
server {
     listen 80;
     server_name game001.com;
     location / {
     root /opt/Super_Mary;
     index index.html;
  }
}
server {
     listen 80;
     server_name game002.com;
     location / {
     root /opt/xiangqi;
     index index html;
  }
}  # 在网页端输入game001.com进入的是超级玛丽,输入game002.com进入的是象棋(要在hosts修改域名)

Nginx日志

1.排查报错原因

systemctl status nginx.service -l
cat /var/log/nginx/error.log  # 两个都是查看错误日志 能解决百分之90的问题

2.日志参数

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr        # 记录客户端IP地址
$remote_user        # 记录客户端用户名
$time_local         # 记录通用的本地时间
$request            # 记录请求的方法以及请求的http协议
$status             # 记录请求状态码(用于定位错误信息)
$body_bytes_sent    # 发送给客户端的资源字节数,不包括响应头的大小
$http_referer       # 记录从哪个页面链接访问过来的
$http_user_agent    # 记录客户端浏览器相关信息
$http_x_forwarded_for # 真实的客户端IP(在反向代理中生效)
# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,    

3.网站的访问来源

eg:

  1. 修改配置文件(本机ip为172.16.1.8,由vpn启动,vpn的ip是172.16.1.81)
[root@web02 conf.d]# cat game2.conf 
server {
     listen 80;
     server_name game001.com;
     location / {
     root /opt/Super_Mary;
     index index.html;
  }
}
server {
     listen 80;
     server_name game002.com;
     location / {
     root /opt/xiangqi;
     index index.html;
  }
}  
  1. 域名解析
192.168.15.8    game001.com
172.16.1.8      game002.com
  1. 依次访问后查看日志
192.168.15.1 - - [04/Jan/2022:15:36:07 +0800] "GET /sounds/stomp.mp3 HTTP/1.1" 404 555 "http://game001.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" "-"  # 本机的windowip访问
172.16.1.81 - - [04/Jan/2022:15:34:51 +0800] "GET /img/stype_1/b_m.png HTTP/1.1" 200 2271 "http://game002.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"  # vpn的ip访问
  1. 总结

从公网访问的话ip是本机window系统的ip

而从内网访问的话因为是经由vpn访问,所以访问ip是vpn的ip

Nginx常用模块

1.Nginx访问控制模块

  • ngx_http_access_module

语法

#允许访问的语法
Syntax: allow address | all;
Default:    —
Context:    http, server, location, limit_except
 
#拒绝访问的语法
Syntax: deny address | all;
Default:    —
Context:    http, server, location, limit_except
 
#如果配置允许,则也要配置拒绝;配置拒绝可以单独配置

# 特别注意!!!   匹配规则是从上往下的,上面的符合就不匹配下面的,不符合就依次往下匹配。

案例

1.允许192.168.15.1访问,不允许其他IP访问

[root@web02 conf.d]# vim xiangqi.conf
server {
        listen 80;
        server_name game002.com;
        allow  192.168.15.1;  # 允许192.168.15.1访问
        deny all;  # 不允许其他IP访问
        location / {
        root /opt/xiangqi;
        index index.html;
    }
}

image

image

2.允许192.168.15.0这个网段访问,不允许其他网段访问

[root@web02 conf.d]# vim xiangqi.conf
server {
        listen 80;
        server_name game002.com;
        allow 192.168.15.0/24;  # 允许192.168.15.0这个网段访问
        deny all;  # 不允许其他网段访问
        location / {
        root /opt/xiangqi;
        index index.html;
    }
}
# 知识补充 curl -H'Host:game.com' -I 192.168.15.8 从linux访问网站。

3.只允许通过VPN来访问

[root@web02 conf.d]# vim xiangqi.conf
server {
        listen 80;
        server_name game002.com;
        allow 117.16.1.81;  # 允许通过VPN来访问
        deny all;  # 其他拒绝
        location / {
        root /opt/xiangqi;
        index index.html;
    }
}

image
image

2.Nginx访问认证模块

  • ngx_http_auth_basic_module

语法

#开启的登录认证
Syntax: auth_basic string | off;
Default:    auth_basic off;  # 默认
Context:    http, server, location, limit_except  # 可使用的地方
 
#指定登录用的用户名密码文件
Syntax: auth_basic_user_file file;
Default:    —
Context:    http, server, location, limit_except

案例

1、安装httpd-tools
[root@web01 ~]# yum install httpd-tools -y

2、生成用户名密码文件
[root@web01 ~]# htpasswd -c /etc/nginx/auth zonghan
New password: 
Re-type new password: 
Adding password for user zonghan

3、将文件路径加入Nginx配置
[root@web01 ~]# vim /etc/nginx/conf.d/game2.conf
    auth_basic "Welcome To Login";
    auth_basic_user_file /etc/nginx/auth;

4、重启Nginx
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx

image

3.目录索引模块

  • ngx_http_autoindex_module

语法

Syntax: autoindex on | off;
Default:    autoindex off;  # 默认关闭
Context:    http, server, location  # 适用地方
# ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。
# 当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块。
展示目录索引
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
autoindex_format html | xml | json | jsonp;

案例

显示目录

[root@web02 conf.d]# vim index.conf
server {
        listen 80;
        server_name 192.168.15.8;
        autoindex on;  # 展示目录索引
        location / {
        root /opt;
   }
}

image

文件大小四舍五入

[root@web02 conf.d]# vim index.conf
server {
        listen 80;
        server_name 192.168.15.8;
        autoindex on;
        autoindex_exact_size off;
        location / {
        root /opt;
   }
}

image

显示本地时间

[root@web02 conf.d]# vim index.conf
server {
        listen 80;
        server_name 192.168.15.8;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        location / {
        root /opt;
   }
}

image

显示目录的格式

[root@web02 conf.d]# vim index.conf
server {
        listen 80;
        server_name 192.168.15.8;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        autoindex_format json;
        location / {
        root /opt;
   }
}  # 有html、xml、json、jsonp格式,默认是html

image

4.控制速率的模块模块

  • ngx_http_limit_req_module

语法

#设置空间的语法
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
	 eg:limit_req_zone $remote_addr zone=one:10m rate=1r/s;
	    声明连接池       变量          名称  连接池的大小  速率
Default:    —
Context:    http

limit_req_zone          #设置空间的模块
key                     #空间存储的内容
zone                    #指定空间
=name                   #空间的名字
:size                   #空间的大小
rate=rate [sync];       #读写速率

#调用的语法
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
	 eg:limit_req zone=one burst=5;
Default:    —
Context:    http, server, location

limit_req               #调用控件模块
zone=name               #指定空间=空间的名字
[burst=number]          #允许多请求几次
[nodelay | delay=number]; #延时

# 特别注意!!!  定义空间语法的时候   如果要作用于location要写在server内,调用时写在location,要作用于server要写在http内,调用时写在server,要作用于http要写在全局呢内,调用时写在http内

案例

要求每秒只能有一个访问

[root@web02 conf.d]# cat supermary.conf 
limit_req_zone $remote_addr zone=one:10m rate=1r/s;
server {
    listen 80;
    server_name 192.168.15.8;
    limit_req zone=one burst=5;  # 连续刷新5次就503
    location / {
        root /opt/Super_Marie;
	index index.html;
    }
}

image

5.控制访问连接数模块

  • ngx_http_limit_conn_module

语法

#设置限制的空间
Syntax: limit_conn_zone key zone=name:size;
     eg:limit_conn_zone $remote_addr zone=addr:10m;
Default:    —
Context:    http
 
limit_conn_zone     #设置空间的模块
key                 #指定空间存储的内容
zone                #指定空间
=name               #空间名字
:size;              #空间的大小
 
#调用限制的空间
Syntax: limit_conn zone number;
Default:    —
Context:    http, server, location
 
limit_conn          #调用空间的模块
zone                #空间的名字
number;             #指定可以同时连接的次数

案例

要求1个ip只有1个连接

[root@web02 conf.d]# cat supermary.conf 
limit_conn_zone $remote_addr zone=addr:10m;
server {
    listen 80;
    server_name 192.168.15.7;
    limit_conn addr 1;  # 调用
    location / {
        root /opt/Super_Mary;
	index index.html;
    }
}

压力测试

1、安装ab测试命令
	yum install httpd-tools -y 

	2、ab 参数
		-n : 总共需要访问多少次
		-c : 每次访问多少个
eg: ab -n 100000 -c 200 http://192.168.15.8/

6.Nginx状态监控模块

  • ngx_http_stub_status_module

语法

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

案例

监控Nginx运行状态

[root@web02 conf.d]# cat game5.conf 
server {
    listen 80;
    server_name 192.168.15.7;
    location / {
        stub_status;
    }
}

image

posted @ 2022-01-04 20:30  zong涵  阅读(1038)  评论(1编辑  收藏  举报