使用场景示例
# 定义要包含在负载均衡方案中的服务器。
# 最好使用服务器的私有IP以获得更好的性能和安全性。
http {
upstream backend {
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}
server{
server_name game1.test.com;
listen 80;
location / {
proxy_pass http://backend
# 用户请求的时候HOST的值是game1.test.com, 那么代理服务会像后端传递请求的还是game1.test.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 10s;
# nginx代理等待后端服务器的响应时间
proxy_read_timeout 10s;
# 后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 10s;
# nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传,不是全部接收完再传给客户
proxy_buffering on;
# 设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 8k;
# proxy_buffers 缓冲区
proxy_buffers 8 8k;
# 状态标记
proxy_next_upstream http_404 http_500 http_502 http_503 http_504 http_403;
}
}
}
如下:
upstream backend {
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}
如下:
upstream backend {
server 10.1.0.101;
server 10.1.0.102 weight=3;
server 10.1.0.103 weight=5;
}
upstream backend {
ip_hash;
server 10.1.0.101;
server 10.1.0.102 weight=3;
server 10.1.0.103 weight=5;
}
upstream backend {
least_conn;
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}
upstream backend {
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
hash $request_uri;
hash_method crc32;
}
upstream backend {
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
fair;
}
upstream backend {
sticky;
server 10.1.0.101;
server 10.1.0.102;
server 10.1.0.103;
}
追加在upstream中server的ip配置后的参数:
注:nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
# ngx_http_upstream_module
#语法
Syntax: upstream name { ... }
Default: —
Context: http
#例子
upstream [连接池的名称] {
[存放的IP]
server [ip1]:[端口] [分发策略];
server [ip2]:[端口] [分发策略];
}
server {
... ...
location / {
proxy_pass http://[连接池的名称] ;
}
}
语法: proxy_set_header field value;
默认: proxy_set_header Host $http_host;
proxy_set_header Connection close;
位置: http, server, location
# 用户请求的时候HOST的值是game1.test.com, 那么代理服务会像后端传递请求的还是game1.test.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#nginx代理与后端服务器连接超时时间(代理连接超时)
语法: proxy_connect_timeout time;
默认: proxy_connect_timeout 60s;
位置: http, server, location
#nginx代理等待后端服务器的响应时间
语法: proxy_read_timeout time;
默认: proxy_read_timeout 60s;
位置: http, server, location
#后端服务器数据回传给nginx代理超时时间
语法: proxy_send_timeout time;
默认: proxy_send_timeout 60s;
位置: http, server, location
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
语法: proxy_buffering on | off;
默认: proxy_buffering on;
位置: http, server, location
#设置nginx代理保存用户头信息的缓冲区大小
语法: proxy_buffer_size size;
默认: proxy_buffer_size 4k|8k;
位置: http, server, location
#proxy_buffers 缓冲区
语法: proxy_buffers number size;
默认: proxy_buffers 8 4k|8k;
位置: http, server, location
upstream load {
server 39.108.93.110:80;
server 47.75.66.116:80;
}
server {
server_name load.ifanatic.cn;
listen 80;
location / {
proxy_pass http://load;
# 用户请求的时候HOST的值是game1.test.com, 那么代理服务会像后端传递请求的还是game1.test.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 10s;
# nginx代理等待后端服务器的响应时间
proxy_read_timeout 10s;
# 后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 10s;
# nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传>给客户
proxy_buffering on;
# 设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 8k;
# proxy_buffers 缓冲区
proxy_buffers 8 8k;
# 状态标记
proxy_next_upstream http_404 http_500 http_502 http_503 http_504 http_403 http_429;
}
}
cat /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;