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本机访问
- 在windows系统中通过浏览器访问tomcat服务器
通过修改本地 host 文件,将 www.123.com 映射到 192.168.137.129
配置完成之后,我们通过 www.123.com:8080 访问到第一步出现的 Tomcat初始界面。
1.2、反向代理实例一演示
那么如何只需要输入 www.123.com 便可以跳转到 Tomcat初始界面呢?便用到 nginx的反向代理。
(1)在 nginx.conf 配置文件中增加如下配置
如上配置,我们监听80端口,访问域名为www.123.com,不加端口号时默认为80端口,故访问该域名时会跳转到127.0.0.1:8080路径上。
(2) 在浏览器端输入 www.123.com 结果如下:
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{}
2.2、反向代理实例二演示
2.3、location指令说明
该指令用于匹配 URL。
语法如下:
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分配服务器策略
随着互联网信息的爆炸性增长,负载均衡(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、其他参数
三、nginx配置实例-动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。
通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。
此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。
1、实验代码
1.项目静态资源准备
- nginx配置
找到nginx安装目录,打开/conf/nginx.conf配置文件
添加监听端口、访问服务名字;重点是添加location;
最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功。
2、最终测试
(1)浏览器中输入地址http://192.168.137.129/image/01.jpg
autoindex on列出目录。
注意:文件路径的斜线。
(2)在浏览器地址栏输入地址http://192.168.137.129/www/a.html