Nginx配置实例

简介: 反向代理、负载均衡、动静分离的演示和配置。

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

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
16天前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
49 0
|
17天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
24 0
|
1月前
|
安全 应用服务中间件 Linux
linux nginx的配置总结
linux nginx的配置总结
19 0
|
16天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
47 0
|
1天前
|
应用服务中间件 nginx
nginx配置集群轮训策略
nginx配置集群轮训策略
9 0
|
2天前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
10天前
|
应用服务中间件 PHP nginx
php如何实现检测nginx配置的正确性
请确保在执行此操作时,PHP有足够的权限来执行Nginx命令和访问Nginx配置文件。另外,将上述代码嵌入到您的应用程序中时,要注意安全性,以防止潜在的命令注入攻击。
50 3
|
16天前
|
安全 应用服务中间件 网络安全
linux_nginx中添加ssl配置(open ssl)
linux_nginx中添加ssl配置(open ssl)
25 1
|
16天前
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
32 1
|
20天前
|
安全 应用服务中间件 网络安全
SSL原理、生成SSL密钥对、Nginx配置SSL
现在,你的Nginx虚拟主机应该已经配置了SSL,可以通过HTTPS安全访问。确保在生产环境中使用有效的SSL证书来保护通信的安全性。
30 0