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;
}
转载:https://blog.csdn.net/xuezhiwu001/article/details/100849357
查看评论