Nginx实现负载均衡与Nginx缓存功能(2)

1)替换uri
  常用于页面很固定的时候。比如双十一的大促主页面。
  语法如下:

location /uri { proxy_pass http://ip:port/newuri/; //location的/uri将被替换为/newuri }

  举例如下:

location /mobi { proxy_pass http://172.17.251.66/mobile/; //将/mobi 的请求跳转到新服务器上/mobile目录下 }

  在这里,我们需要注意的是,:port/newuri;,这个地方最后面加不加/意义是不同的。
  如上文,我们就加上了/,则意味着全部替换。
  如果我们不加/,则是将新路径当做其上级目录,访问的是新路径下的原路径。举例如下:

location /mobi { proxy_pass http://172.17.251.66/mobile; //将/mobi 的请求跳转到新服务器上/mobile/mobi目录下 }

2)转换url
  相当于分流,基于url来分流,把一类的请求发送到一个机器(一个集群)中,具体操作看机器的设置。
  如果location的URI是通过模式匹配定义的,其URI将直接被传递,而不能为其指定转换的另一个URI。
  举例如下:

location ~ ^/mobile { proxy_pass ; }

  这段代码的意思是,只要有/mobile的网址,会直接转到下。
  
3)URL重定向
  也就是整个url的重定向。比如两个网站合并或者更换域名时,原先的域名已经不用了,但是有些页面还在访问,就可以通过这种方法来整个重定向,重定向到新的域名中。
  如果在location中使用的URL重定向,那么nginx将使用重定向后的URI处理请求,而不再考虑之前定义的URI。

location /youxi{ rewrite ^(.*)$ /mobile/$1 break; proxy_pass ; }

  这段代码的意思就是,只要你访问的是带/youxi的页面,就会自动重定向到$1上。$1指的是^(.*)$中括号内的部分。这样就实现了整个url的重定向。
  在这里,我们也来详细说说ngx_http_rewrite_module模块,这是一个非常好用的模块。

2.2.1.1ngx_http_rewrite_module模块

1)rewrite 用法
  将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI。
  其语法是:

  rewrite regex replacement [flag]

  注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查。
  隐含有循环机制,但不超过10次;如果超过,提示500响应码, [flag]所表示的标志位用于控制此循环机制。
  如果replacement是以或https://开头,则替换结果会直接以重向返回给客户端。
  下面我们来说一说flag的具体选项:
[flag]:

last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮(从第一个开始)重写检查;提前重启新一轮循环。
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用。
redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以或https://开头,使用相对路径,状态码: 302。
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301。

  由下图我们可以更清楚的看出跳转到的位置:

Nginx实现负载均衡与Nginx缓存功能

2)return用法
  return的用法语法如下:

  return code [text];   return code URL;   return URL;

  停止处理,并返回给客户端指定的响应码。
  

2.2.2 proxy_set_header配置

  proxy_set_header用于将发送至server的报文的某首部进行重写。常用于nginx做负载均衡时, 获取客户端IP时, 添加forward头部。
  语法如下:

proxy_set_header Host $host; //目的主机地址 proxy_set_header X-REMOTE-IP $remote_addr; //上一跳地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //客户端主机地址

  原有请求报文中如果存在X-Forwared-For首部, 则将client_addr以逗号分隔补原有值后, 否则则直接添加此首部;

2.3 nginx实现负载均衡

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ebb3aa2b72bd7fc12fc30ad5ad077081.html