02-Nginx的简单应用
4.3、应用
4.3.1、配置文件结构
-
Nginx的配置文件(
conf/nginx.conf
)整体上分为三部分:全局块、events块、http块,这三块配置的信息如下表所示 -
区域 职责 全局块 配置和nignx运行相关的全局配置 events块 配置和网络连接相关的配置 http块 配置代理、缓存、日志记录、虚拟主机等配置 具体结构图如下所示
-
-
PS
- 在全局块、events块和http块中,经常配置的是http块
- 在http块中可以包含多个server块,每个server块可以配置多个location块
-
4.3.2、部署静态资源
-
Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源
-
相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中
-
将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可
-
server { listen 80; #监听端口 server_name localhost; #服务器名称 location / { #匹配客户端请求url root html; #指定静态资源根目录 index index.html; #指定默认首页 } }
-
-
测试
- Step1:将静态资源上传到
/usr/local/nginx/html
目录中 - Step2:启动nignx
- Step3:访问具体地址
- Step4:配置首页
- 如果要将
test.html
作为nginx的首页,可以修改location的index指令,配置为test.html
如下所示(少了个分号,请自行添加) - 配置完毕后,可以通过指令,来检查配置文件是否配置正确
nginx -t
- 修改配置文件之后,需要重新加载才可以生效
nginx -s reload
- 如果要将
- Step5:访问首页
192.168.222.135
- Step1:将静态资源上传到
4.3.3、反向代理
4.3.3.1、概念介绍
问题导入
- 为什么叫反向代理?
- 既然有反向代理,那有没有正向代理?
- 1、正向代理
- 正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端
- 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径
- 正向代理一般是在客户端设置代理服务器,通过代理服务器转发请求,最终访问到目标服务器
- 2、反向代理
- 反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的
4.3.3.2、反向代理小案例
-
在Nginx,可以在
nginx.conf
中配置反向代理-
server { listen 80; server_name localhost; location / { proxy_pass http://192.168.222.140:80; # 反向代理配置,将请求转发到指定服务器上 } }
-
上述配置的含义为:当访问Nginx的80端口的时候,根据反向代理配置,会将请求转发到http://192.168.222.135:80对应的服务上
-
-
测试
- 需求
- 在192.168.222.140这台服务器中部署了java应用,运行端口为80,并提供了一个可访问链接
/hello
。现在需要在访问nginx的80端口的时候,通过nginx将请求转发到192.168.222.140:80的服务
- 在192.168.222.140这台服务器中部署了java应用,运行端口为80,并提供了一个可访问链接
- Step1:在192.168.222.140部署服务并启动
- Step2:在192.168.222.135中的nginx.conf中配置反向代理
- Step3:检查配置文件,并重新加载
nginx -t
nginx -s reload
- Step4:在Windows上访问Nginx(注意开放端口)
- 需求
4.3.4、负载均衡
4.3.4.1、概念介绍
- 早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多态服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现
- 应用集群
- 将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据
- 负载均衡器
- 将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理
4.3.4.2、应用案例
-
Step1:将两个不同的jar包,上传到不同的服务器上
-
不过在测试的时候,由于个人原因并没有那么多服务器,可以在一台服务器中启动多个服务,运行在不同的端口号上测试
- 同时为了保证测试的简易性,两个jar包访问的路径除了ip地址不一样,其他的都应该一样
-
Step2:运行上传的两个jar包,运行端口分别是8080,8081
-
Step3:在nginx中配置负载均衡
-
Step4:重新加载Nginx配置文件,并在windows浏览器中访问
-
因为Nginx默认的负载均衡策略是轮询策略,所以8080端口和8081端口会轮流被访问
4.3.4.3、负载均衡策略
-
除了上述默认的轮询策略以外,在Nginx中还提供了其他的负载均衡策略,如下表所示
-
名称 说明 特点 轮询 默认方式 weight 权重方式 根据权重分发请求,权重大的分配到请求的概率大 ip_hash 根据ip分配方式 根据客户端请求的IP地址计算hash值,根据hash值来分发请求,同一个IP发起的请求,会转发到同一个服务器上 url_hash 根据url分配方式 根据客户端请求url的hash值,来分发请求,同一个url请求,会转发到同一个服务器上 least_conn 依据最少连接方法 根据服务器集群中,哪个服务器当前处理的连接少,请求优先转发到这台服务器 fair 依据响应时间方式 优先把请求分发给处理请求时间短的服务器
-
-
很明显,正常情况下,权重的负载均衡策略最为合理。
-
upstream targetserver{ server 192.168.222.140:8080 weight=2; server 192.168.222.140:8081 weight=1; }
-
上述配置的weight权重是相对的,效果相当于有1/3的概率请求会转发到8081端口,有2/3的概率请求转发到8080端口
-