nginx 通过方向代理实现负载均衡,负载均衡是大流量网站要做的措施,单从字面上的意思来理解为N台服务器平均分担负载,不会因为某一台服务器负载高宕机而影响用户访问网站,负载均衡至少需要三台服务器,
既然是负载均衡,分摊服务器压力,那么一台服务器最好就负责一个网站。所以只需要配置一个server即可
1.首先是主服务器:
upstream xxx.xxx.com{ server 111.111.111.111:80 weight=2;#权重为2/5 server 222.222.222.222:80 weight=3;#权重为3/5 } server{ listen 80; server_name xxx.xxx.com; location / { proxy_pass http://xxx.xxx.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
2.两台从服务器
server { listen 80 default_server; listen [::]:80 default_server; server_name _; #root /usr/share/nginx/html; root /var/www/html; index index.html index.php; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
负载均衡4种策略
-
- 轮询:默认
-
-
- 每个请求按照时间顺序逐一分配到不同的后台服务器,如果后台当机了,自动剔除
upstream xxx.xxx.com{
server 111.111.111.111:80 fail_timeout=20s;
server 222.222.222.222:80 fail_timeout=20s;server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
- 每个请求按照时间顺序逐一分配到不同的后台服务器,如果后台当机了,自动剔除
-
- 指定权重
-
-
-
- 指定轮询纪律,weight和访问比例成正比。用于后段服务器性能不均的情况
upstream xxx.xxx.com{ server 111.111.111.111:80 weight=2 fail_timeout=20s;
server 222.222.222.222:80 weight=3 fail_timeout=20s;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)}
- 指定轮询纪律,weight和访问比例成正比。用于后段服务器性能不均的情况
-
-
-
- IP绑定 ip_hash
-
-
-
- 每个请求按访问ip的hash结果分配,这样每个访问一个后段服务器。解决了session问题
upstream xxx.xxxxcom{ server 111.111.111:80 fail_timeout=20s; server 222.222.222:80 fail_timeout=20s;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) ip_hash; }
- 每个请求按访问ip的hash结果分配,这样每个访问一个后段服务器。解决了session问题
-
-
-
- fair(第三方)
-
-
-
- 按照后段服务器的响应时间来分配请求,响应时间最短的优先分配
upstream xxx.xxx.comr { server 111.111.111:80 fail_timeout=20; server 222.222.222:80 fail_timeout=20;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) fair; }
- 按照后段服务器的响应时间来分配请求,响应时间最短的优先分配
-
-
-
注意
systemctl restart nginx时失败;原因查看systemctl status nginx;
配置默认访问文件之间使用空格分开 index index.html index.php
配置的前面和中间的尽量使用一个空格,或者一个tal键。
当启动正常时,但访问出现500错误,可能是location / {中出现错误}