反向代理

1.反向代理使用权重轮询

配置反向代理一般在Nginx配置文件中进行,Nginx配置文件一般在/etc/nginx/nginx.conf,修改完配置文件后,重启服务或重载配置文件

-bash-4.2# nginx -s stop
-bash-4.2# nginx
  • 先使用stop信号停止Nginx服务

  • 然后使用nginx命令启动Nginx服务

-bash-4.2# nginx -s reload
  • 可以直接使用reload信号对配置文件进行重载

  • 基础反向代理配置如下

upstream test {
          server test1.com;
          server test2.com;
} 
        
location / {
  proxy_pass http://test;
}
  • upstream 是一个用于定义一组后端服务器的模块,可以写IP地址或域名,存放与http块中

  • proxy_pass可以把请求转发到upstream定义的后端服务器上,存在与server块中

upstream上如果没有特别定义,那么使用的是权重轮询,默认权重都是1

upstream test {
          server test1.com weight=5;
          server test2.com;
} 

这样test1.com的权重为5,test1.com的权重为1;轮询情况:如果有6个请求发送到Nginx,会有5个请求转发到test1.com,然后会有1个请求转发到test2.com

2.反向代理中使用哈希

upstream块中可以不使用权重轮询,可以选择使用IP哈希算法。

IP哈希算法使用客户端的 IP 地址进行哈希计算,确保相同 IP 的请求被发送到同一台后端服务器,有助于保持会话一致性。

upstream test {
		  ip_hash;
          server test1.com;
          server test2.com;
} 
        
location / {
  proxy_pass http://test;
}

请注意,使用哈希算法后,如果节点增加,可以会导致同一个IP的请求转发到另一个后端服务上

3.设置备用后端服务

在上面两种方法中,在upstream中定义的全部后端服务都会接收请求,如果不想使用后端服务轮询,可以设置备用后端服务,这样会在一个后端服务不可用之后,才会把请求转发到备用后端服务。

upstream test {
        server test1.com max_fails=3 fail_timeout=30s;
        server test2.com backup;
}
        
location / {
  proxy_pass http://test;
}
  • 在备用后端服务上加上backup参数,表示这个是个备用后端服务,在主后端服务不可用之前,请求不会转发到备用后端服务

  • max_fails=3参数表示最大重试次数为3,重试3次后把test1.com标记为不可用,将请求转发到备用后端服务

  • fail_timeout=30s表示的是重试时间,一次请求失败后,会在30s后才再次接受请求

注意:在主后端服务不可用之后,会由备用后端服务接受请求,但如果主后端服务恢复之后,请求任然会转发到主后端服务。

最后更新于