四层负载(IP:Port) 、七层负载(http://xxx)
nginx upstream 模块(通过server指令指定),和server平级
upstream backends {
server 192.168.43.42:10086 down;
server 192.168.43.42:10087;
server 192.168.43.42:10088;
}
server {
listen 192.168.43.42:888;
server_name www.inhao.com;
location / {
proxy_pass http://backends;
}
}
属性详解: upstream 主要是定义一个后端服务地址的集合列表,每个后端服务使用一个server命令表示 upstream {} 和 Server {} 两部分内容属于平级关系。
后端服务状态 在upstream模块中,可以使用server命令指定后端服务器的地址,同时还可以设置后端服务器在负载均衡调度中 的状态,常用的状态有以下几种:
down: 表示当前server主机暂时不参与负载均衡
backup:后备主机,当所有非backup机器出现故障或者繁忙的时候,才会请求backup机器。
max_fails:允许请求的最大失败数,默认为1,配合fail_timeout一起使用
fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s。
负载均衡配置文件
# vim /etc/nginx/conf.d/upstream.conf
upstream backends {
server 192.168.43.42:10086 down;
server 192.168.43.42:10087;
server 192.168.43.42:10088;
}
server {
listen 192.168.43.42:888;
server_name www.inhao.com;
location / {
proxy_pass http://backends;
}
}
# vim /etc/nginx/conf.d/backend.conf
server {
listen 192.168.43.42:10086;
location / {
root /var/www/html/hello/;
try_files $uri $uri/ =404;
}
}
server {
listen 192.168.43.42:10087;
location / {
root /var/www/html/nihao/;
try_files $uri $uri/ =404;
}
}
server {
listen 192.168.43.42:10088;
location / {
root /var/www/html/huanying/;
try_files $uri $uri/ =404;
}
}
准备后端服务文件
mkdir -p /var/www/html/hello/
mkdir -p /var/www/html/nihao/
mkdir -p /var/www/html/huanying/
echo '<h1>backend_hello</h1>' > /var/www/html/hello/index.html
echo '<h1>backend_nihao</h1>' > /var/www/html/nihao/index.html
echo '<h1>backend_huanying</h1>' > /var/www/html/huanying/index.html
nginx -t
nginx -s reload
查看效果
apt-get install curl -y
for i in {1..100} ;do curl 192.168.43.42;done
自定义日志实践
需要获取代理前面客户端的真是IP,需要开启 --with-thhp_realip_module功能,Ubuntu默认安装的已经开启了该功能。
设置日志格式
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_x_real_ip 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
两个通常一起使用
# vim /etc/nginx/nginx.conf
# Logging Settings
log_format proxy_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$http_x_real_ip" "$http_x_forwarded_for"';
proxy_format是这个日志格式的名字
负载均衡配置文件
~# vim /etc/nginx/conf.d/upstream.conf
upstream backends { server 192.168.43.42:10086; }
server {
listen 88; server_name localhost;
location / { proxy_pass http://backends;
###
proxy_set_header X-Real-IP $remote_addr;
###
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
后端代理配置文件
~# vim /etc/nginx/conf.d/backend.conf
server {
listen 192.168.43.42:10086;
root /var/www/html/app1/;
# 设置日志格式及存放位置
access_log /var/log/nginx/app1/access.log proxy_format;
####
real_ip_header X-Forwarded-For;
# 指定部分ip段
set_real_ip_from 192.168.0.0/16;
#递归
real_ip_recursive on;
location / {
try_files $uri $uri/ =404;
}
}
准备后端服务文件
mkdir -p /var/www/html/app1/
echo '<h1>backend_app1</h1>' > /var/www/html/app1/index.html
mkdir /var/log/nginx/app1 -p
# 查看自定制的日志
cat /var/log/nginx/app1/access.log
# 查看默认日志
cat /var/etc/log/nginx/access.log
注意: 如果生产中出现了多级代理,
在第一层代理上添加 proxy_set_header X-Real-IP $remote_addr;属性
在所有代理上必须添加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;属性
真实主机上使用 real_ip_header X-Forwarded-For;属性