Nginx 作为业内最常用的代理服务器,较为详细地记录了用户的访问数据,而且在分布式部署性能优化方面也发挥了积极的作用,Nginx 是不得不提的一个中间件。
Nginx 重要的两个概念:
代理:
正向代理的特点是你非常清楚地知道你要去哪儿,访问什么服务器,但服务器并不关心你的出发地是哪里,它只知道你从哪个代理服务器过来。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
负载均衡
但是随着用户体量的上升,一台服务器并不能支撑现有用户的访问,那你就会考虑使用两台或者多台服务器。
1.轮询:
也就是使用平均分配的方式,将每个请求依次分配到配置的后端服务器上。除非有服务宕机,才会停止分发。代码如下:
upstream localhost { //分发到各应用服务 server 127.0.0.1:7070; server 127.0.0.1:7071; } server{ //Nginx核心监听端口 listen 8012; server_name localhost; location / { proxy_pass http://localhost; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
2.权重
权重即配置轮询的比重,在真实的互联网场景下,很多服务器上都会配置多个应用,这样会导致每台服务器的资源占用不一致,所以在分布式部署配置下也需要注意这一点
一:相对空闲的机器可以多配置访问比例。
二:比较繁忙的机器可以少配置一些。
其中 ip1、ip2 以及 port 需要配置你实际的部署 ip 和 port。
upstream test { server ip1:8080 weight=9; server ip2:8081 weight=1; }
3.ip_hash
但上面两种配置方式在电商场景下有个很常见的问题,比如你登录了一个网站,登录信息已经保存到 a 机器,但当你做后续操作时的请求会到 b 机器,那么就获取不到你原 来登录的信息,此时你就需要重新登录了。这样的情况是用户肯定不能接受的,ip_hash 模式就可以很好地解决这个问题,让每次访问能基于同一用户访问固定的服务器。
ip_hash 模式配置示例如下:
upstream test { ip_hash; server localhost:8080; server localhost:8081; }