Nginx - 架构篇 proxy代理的处理流程

Nginx - 架构篇 proxy代理的处理流程

制定上游服务地址upstream与server指令

功能:指定一组上有服务器地址,其中,地址可以是域名、IP地址或者unix socket地址。可以在域名或者IP地址后加端口,如果不加端口,那么默认使用80端口。

upstream backend  {
  server backend1.example.com weight=5;
  server backend2.example.com:8080;
  server unix:/tmp/backend3;
}
 
server {
  location / {
    proxy_pass  http://backend;
  }
}

通用参数:

  • backup:指定server为备份服务,仅当非备份server不可用时,请求才会转发到该server。
  • 表示某台服务已经下线,不在服务。

加权Round-Robin负载均衡算法

功能:在加权轮询的方式访问server指令指定的上游服务。

ip_hash和hash模块

功能:以客户端的IP地址为hash算法的关键字,映射到特定的上游服务器中。

upstream backend {
  ip_hash;
  server   backend1.example.com;
  server   backend2.example.com;
  server   backend3.example.com  down;
  server   backend4.example.com;
}

upstream 模块提供的变量

根据指令生成发往上游的包体:

proxy_method proxy #请求的方法
proxy_set_header #根据指令修改发往上游的请求,若vaule的值为空字符串,则整个header都不会向上游发送
proxy_pass_request_headers on | off  是否放向上游发送请求
proxy_pass_request_body on | off 是否向上游发送body内容

接收用户请求包体的方式:

语法: proxy_buffering on|off
默认值: proxy_buffering on
上下文: http, server, location
该指令开启从后端被代理服务器的响应内容缓冲.
如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令
client_body_buffer_size 

与上游服务器建立连接

proxy_connect_timeout 设置超时时间,响应码为502
proxy_next_upstream 上游连接失败,更换一台服务器
proxy_socket_keepalive 上游连接启用Tcp keepalive

接收上游的http响应头部

语法: proxy_buffer_size the_size
默认值: proxy_buffer_size 4k/8k
上下文: http, server, location

该指令设置缓冲区大小,从被代理的后端服务器取得的响应内容,会先读取放置到这里.小的响应header通常位于这部分响应内容里边。

禁用上游响应头部的功能

proxy_ignore_headers 某些响应头部可以改变nginx的行为,以禁止它们生效

上游返回失败的处理方法:

proxy_next_upstream 

前提:没有向客户端发送任何内容

配置

  • error
  • timeout
  • invalid header
  • http_
  • non_idempotent
  • off

location / {
      proxy_pass         http://app-proxy;
      proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
      proxy_next_upstream_tries 3;
      proxy_connect_timeout 60s;
      proxy_read_timeout 60s;
      proxy_send_timeout 60s;
      proxy_pass_request_headers      on;
      proxy_set_header   Host             $host:$server_port;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      set $domain default;
 }
发布了98 篇原创文章 · 获赞 185 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/xuezhiwu001/article/details/100849357
今日推荐