zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

nginx—proxy代理实现和相关配置优化负载均衡

配置负载代理Nginx 实现 优化 相关 均衡
2023-09-27 14:25:42 时间

代理规则

#将URI为/test的请求代理到127.0.0.1上,端口号为666,协议为HTTP
location = /test {
    proxy_pass    http://127.0.0.l:666;
}

#/test/v1/会被替换为/abc/,如/test/v1/xxx?a=1到达后端会变为/abc/xxx?a=1
location /test/v1/ {
    proxy_pass http://127.0.0.1:666/abc/
}

location /abc/和location/abc的区别:
/abc/:原样替换
/abc:什么都不会改变,直接传递原始的URL

减少后端的网络开销

  • proxy_pass_request_body:确定是否向后端服务器发送HTTP请求体
  • proxy_pass_request_headers:确定是否向后端服务器发送HTTP请求头

控制请求头和请求体

名称作用支持配置的环境
proxy_hide_header禁止某个请求头被转发到后端服务器,如proxy_hide_hedaer Cache-Controlhttp、server、location
proxy_pass_header

允许已被禁止转发的请求头继续转发,如

proxy_pass_hedaer Cache-Control

http、server、location
proxy_set_header添加或修改请求头信息,如proxy_set_header_ HOST "www.why.com"http、server、location
proxy_set_body对请求体进行覆盖,后端服务器收到的将会是覆盖后的值,如proxy_set_body 'why=123'http、server、location

注意:在设置proxy_set_header后,下一级会继承合格请求头的内容。但如果下一层级也配置了proxy_set_hader指令,那么当请求到下一层级时,在上一层级配置的请求头将会被全部覆盖。比如:server使用了proxy_set_header,那么location也配置了proxy_set_header,则会覆盖server配置的,如要保留需重新在location配置。

控制请求和后端服务器的交互时间

名称作用位置
proxy_connect_timeout设置请求和后端服务器建立连接的超时时间,默认是60s,例如:proxy_connect_timeout 5s;http/server/location
proxy_read_timeout设置后端服务器读取相应的 超时时间,即两个相邻请求之间的时间,若在规定时间内客户端没有收到返回内容,就会关闭连接,默认是60s,例如:proxy_read_timeout 10s;http/server/location
proxy_send_timeout设置请求发送到后端服务器的超时时间,即两个相邻请求之间的时间,如果再规定时间内后端服务器没有受到任何请求,就会关闭连接,默认是60s,例如:proxy_send_timeout 10s;http/server/location

代理多台服务器

upstream why_server {
    server 127.0.0.1:81 max_fails=5 fail_timeout=5s weight=10;
    server 127.0.0.1:82 max_fails=5 fail_timeout=5s weight=10;
    server 127.0.0.1:83 max_fails=5 fail_timeout=5s weight=10;
}
server {
    listen 80;
    location / {
        proxy_pass http://why_server
    }
}

长连接配置

名称作用位置
keepalive_requests设置每个连接的最大请求次数,超过这个次数就会关闭该连接建立新的连接http/server/location
keepalive_timeout设置keep-alive客户端连接在服务器端保持开启的超时时间http/server/location
keepalive设置worker进程和后端服务器之间保持空闲连接的最大值,如过空闲连接数大于这个值,则会关闭使用最少的连接upstream
proxy_http_version 1.1设置HTTP请求协议,要确保是1.1长连接协议http/server/location
proxy_set_header Connection ""清空Connection请求头,避免客户端传递短连接的请求头信息http/server/location

加速域名解析

两个配置都支持http、server、location三个块

server {
    listen 80;
    
    location / {
        resolver 114.114.114.114 114.114.115.115 valid=30s;    #有效期之内不会触发DNS解析,使用之前解析的IP地址
        resolver_timeout 5s;    #解析的超时时间
    }
}