接上一编Linux环境下搭建Nginx的文章后,现在和大家一起探讨Linux环境下Nginx的负载均衡。
1. 首先先了解Nginx的5种负载模式:
①轮询策略
每个请求按照时间顺序逐一分配到不同的后端服务器,如果某个服务器gg 了,会自动将这个服务器从轮询种剔除。
②weight权重
指定轮询几率,weight和访问比率成正比,用户服务器性能不均的场景。
③ip_hash
每个请求按访问IP的hash结果分配,这样每个访问访问固定的服务器,可以解决session问题。
④fair(第三方)
按服务器的响应时间分配请求,响应时间短的优先分配
⑤url_hash(第三方)
根据请求的url的hash值将请求分到不同的机器中,当服务器为缓存的时候效率高。
2.利用 ifconfig命令 检查两台服务器的IP地址
主服务器:192.168.42.129
辅服务器:192.168.42.128
这边我只弄了两台nginx服务器,只是为了完成Nginx的搭建。
这边辅服务器是直接将VMware中的Centos7克隆过来的(克隆时要注意的是:当你配置好nginx且访问页面成功时再克隆,克隆要在第四步之前)。
3. 在本地的host文件中配置测试域名:
host文件位置:C:\ Windows\ System32 \ drivers \ etc \ host
配置的域名是你主服务器的IP地址+网址(网址随便输)
例:192.168.42.129(空格)www.linux.com
4. 在nginx安装包下配置nginx.conf文件:
1)文件路径路径:/usr/local/nginx/conf/nginx.conf
2)找到这个文件后输入:vi nginx.conf
3) 将下面的复制到你的配置文件中
```java
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#使用轮询策略方式实现负载均衡
upstream www.linux.com {
server 192.168.42.128:80;
server 127.0.0.1:8080;
}
server{
listen 8080;
server_name www.linux.com;
location / {
root html;
index index.html index.htm index.php;
}
}
server {
listen 80;
server_name www.linux.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://www.linux.com;
root html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
提示:这里面包含日志文件,有问题可以去/usr/local/nginx/logs/下面去看error.log或access.log文件。
第四步只需要主服务器配置,辅服务器不要动。
5.增加IP地址:
为了访问页面时看的清楚请求的是哪台服务器,可以在两台服务器的/usr/local/nginx/html中的index.html加入各自的IP地址
6.启动两台Nginx服务器
命令输入:
cd /usr/local/nginx/sbin/
./nginx
7. 访问网页:
刷新一下,
oh!!! yes!! yes!! yes!!