4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

一、nginx配置实例-反向代理

1、反向代理实例一

实现效果:使用nginx反向代理,访问 www.123.com 直接跳转到127.0.0.1:8080

1.1、实验准备工作

启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080,出现如下界面

  • 在liunx系统安装tomcat,使用默认端口8080
  • tomcat安装文件放到liunx系统中,解压
  • 进入tomcat的bin目录中,./startup.sh启动tomcat服务器

对外开放访问的端口

firewall-cmd --add-port=8080/tcp --permanent

firewall-cmd --reload

查看已经开放的端口号

firewall-cmd --list-all

  • linux本机访问

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

  • 在windows系统中通过浏览器访问tomcat服务器

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解
通过修改本地 host 文件,将 www.123.com 映射到 192.168.137.129

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

配置完成之后,我们通过 www.123.com:8080 访问到第一步出现的 Tomcat初始界面。

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

1.2、反向代理实例一演示

那么如何只需要输入 www.123.com 便可以跳转到 Tomcat初始界面呢?便用到 nginx的反向代理。

(1)在 nginx.conf 配置文件中增加如下配置

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

如上配置,我们监听80端口,访问域名为www.123.com,不加端口号时默认为80端口,故访问该域名时会跳转到127.0.0.1:8080路径上。

(2) 在浏览器端输入 www.123.com 结果如下:

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

2、反向代理实例二

实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中

nginx监听端口为9000,

访问 http://127.0.0.1:9000/edu/ 直接跳转到127.0.0.1:8080

访问 http://127.0.0.1:9000/vod/ 直接跳转到127.0.0.1:8081

2.1、实验准备工作

第一步,准备两个tomcat,一个8080端口,一个8081端口,并准备好测试的页面

webapps/edu/index.html

webapps/vod/index.html

第二步,修改nginx的配置文件,在http块中添加server{}

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

2.2、反向代理实例二演示

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

2.3、location指令说明

该指令用于匹配 URL。

语法如下:

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。(优先正则表达式,就是3和4项)

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

注意:/ 和 (*d)的优先级:后高于前,正则高于普通

二、nginx配置实例-负载均衡

1、实现效果

浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中

2、准备工作

(1)准备两台tomcat服务器,一台8080,一台8081

(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试

3、在nginx的配置文件中进行负载均衡的配置

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

4、nginx分配服务器策略

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中的一个,在linux下有Nginx、LVS、Haproxy等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式(策略):

4.1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

4.2、weight

weight代表权,重默认为1,权重越高被分配的客户端越多

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:

upstream server_pool{

server 192.168.5.21 weight=10;

server 192.168.5.22 weight=10;

}

4.3、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 例如:

upstream server_pool{

ip_hash;

server 192.168.5.21:80;

server 192.168.5.22:80;

}

4.4、fair(第三方)

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

upstream server_pool{

server 192.168.5.21:80;

server 192.168.5.22:80;

fair;

}

4.5、其他参数

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

三、nginx配置实例-动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,

一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。

通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。

具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。

此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

1、实验代码

1.项目静态资源准备

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

  1. nginx配置

找到nginx安装目录,打开/conf/nginx.conf配置文件

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

添加监听端口、访问服务名字;重点是添加location;

最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功。

2、最终测试

(1)浏览器中输入地址http://192.168.137.129/image/01.jpg

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解
autoindex on列出目录。

注意:文件路径的斜线。

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解

(2)在浏览器地址栏输入地址http://192.168.137.129/www/a.html

4_Nginx的三大作用(反向代理,负载均衡,动静分离)详解