今天简单测试了一下Nginx,顺便做了一下笔记:
Nginux HTTP Upstream 模块为后端的服务器提供简单的负载均衡,有以下几种分配方式:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
设备状态:
Weight=NUMBER | 设置服务器的权重,权重数值越高,被 分配到客户端的请求次数越多,默认值为1 |
Max_fails=BUMBER | 在参数fail_timeout指定时间内对后端服务器请求失改的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失改。如果没有设置,则默认值为1,设置为0将关闭这项检查。 |
Tail_timeout=TIME | 在经历参数max_fails设置的失改次数后,暂停的时间。 |
Down | 标记服务器为永久离线状态,用于ip_hash命令。 |
Backup | 仅在非backup服务器全部宕机或繁忙的时候才启用,这台服务器的负载会最轻。 |
一,测试环境:
当月用户访问192.168.0.201的时候,将其负载均衡到205与185服务器上:
192.168.0.201 | 前端转发器 |
192.168.0.205 | 后端真实服务器 |
192.168.0.185 | 后端真实服务器 |
二,配置实例:
1,前端转发器配置文件:
[root@youxia201 conf]# cat nginx.conf
#user nobody;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#定义负载均衡设
upstream web_server {
server 211.154.165.205:8085 weight=1 max_fails=2 fail_timeout=30s;
server 211.154.165.185:8085 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
#proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://web_server;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /var/log/nginx_access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2,后端真实服务器配置文件(185与205配置相同):
[root@youxia205 conf]# cat nginx.conf
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8085;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}