首页 > 技术文章 > Nginx配置实例(二)

bearbrick0 2022-01-13 18:28 原文

Nginx配置实例

反向代理

实现的效果
  打开浏览器,在浏览器地址栏中输入地址www.123.com ,跳转到Linux系统的Tomcat主页面中。

准备工作

安装Tomcat和JDK

image-20220113170654568

安装JDK

image-20220113170832929

启动Tomcat

image-20220113171010916

默认8080端口没开,需要手动对外开放

image-20220113171437054

image-20220113171629847

image-20220113171803138

分析过程

image-20220113172357720

Windows的host文件:

image-20220113172656304

在Nginx中配置反向代理的设置

image-20220113173023620

image-20220113173727163

image-20220113174110569

反向代理2

实现的效果:

使用Nginx反向代理,根据访问的路径跳转到不同的端口的服务中,使用Nginx坚挺端口为9001,
  访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
	访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081

准备工作

image-20220113175106708

image-20220113175221087

image-20220113175416618

更改端口号

image-20220113175833130

image-20220113180039470

image-20220113181032462

image-20220113181048729

Nginx的配置

image-20220113181852253

测试

image-20220113182416577

image-20220113182445366

Location指令的说明

Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server { //这个是服务器级别
      listen 80;
      server_name localhost;
        location / { //这个是请求级别
          root html;
          index index.html index.htm;
        }
      }
}
~ 	: 用于表示URL包含正则表达式,并且区分大小写
~* 	: 用于表示URL包含正则表达式,并且不区分大小写
=  : 用于不含正则表达式的URL前,要求请求字符串与URL严格匹配,如果匹配成功,就停止继续向下搜索并处理请求(精确匹配)
^~ : 

=  : 开头表示精确匹配

^~  : 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头

~  : 开头表示区分大小写的正则匹配                     以xx结尾

~*  : 开头表示不区分大小写的正则匹配                以xx结尾

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/  : 通用匹配,任何请求都会匹配到。

没有修饰符 必须以指定的模式开始

server {
  server_name baidu.com;
  location /abc {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde

= 表示:必须以指定的模式匹配

server {
server_name sish
  location = /abc {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
如下是错的:
http://baidu.com/abc/
http://baidu.com/abcde

~ 表示:指定的正则表达式要区分大小写

server {
server_name baidu.com;
  location ~ ^/abc$ {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1=11&p2=22
如下是错的:
http://baidu.com/ABC
http://baidu.com/abc/
http://baidu.com/abcde

~ 表示:指定的正则表达式不区分大小写*

server {
server_name baidu.com;
location ~* ^/abc$ {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu..com/ABC
http://baidu..com/abc?p1=11&p2=22
如下是错的:
http://baidu..com/abc/
http://baidu..com/abcde

^~ : 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。

@ :定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请求来访问,如try_files或error_page等

如果URL表达式含有正则表达式,则必须有~或者~*标识

查找顺序与优先级

1:带有“=“的精确匹配优先
2:没有修饰符的精确匹配
3:正则表达式按照他们在配置文件中定义的顺序
4:带有“^~”修饰符的,开头匹配
5:带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
6:没有修饰符的,如果指定字符串与URI开头匹配

Location区段匹配示例

location = / {
  # 只匹配 / 的查询.
  [ configuration A ]
}
location / {
  # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
  [ configuration B ]
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
  [ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处
  理。
  [ configuration D ]
} 各
请求的处理如下例:
/ 												 ---> 				onfiguration A
/documents/document.html	 --->				  configuration B
/images/1.gif 						 --->					configuration C
/documents/1.jpg 					 --->					configuration D

负载均衡

image-20220114093905196

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器上,也就是我们说的负载均衡。

实现效果

浏览器输入192.168.189.136/edu/1.html,负载均衡效果,平均到8080和8081端口。
  

准备工作

准备两台Tomcat,一台端口号8080,另一台端口号8081。在两台Tomcat服务器的webapps目录下,新建edu文件夹,并创建页面1.html

image-20220114101750202

image-20220114101825803

Nginx的负载均衡的配置

image-20220114103315117

测试

出现404,或者清理浏览器缓存

image-20220114155728790

image-20220114155747493

分配方式策略

轮询

轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。

upstream  dalaoyang-server {
       server    localhost:10001;
       server    localhost:10002;
}

权重

指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。

upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

IP_hash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。可以解决session共享。

upstream  dalaoyang-server {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

最少连接数

将请求分配到连接数少的服务上。

upstream  dalaoyang-server {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}

动静分离

image-20220114150157837

image-20220114150556843

推荐好的文档

准备工作

image-20220114155300463

修改Nginx的配置文件

image-20220114155229259

测试

image-20220114155910821

image-20220114155939734

image-20220114160128047

推荐阅读