1.需要准备:
本次配置需要三个服务器(至少两个),(这里使用不同系统/不同服务器商的服务器配置是为了说明不限制服务器)
在此本人使用主服务器A(本地服务器win10),次服务器B(阿里云服务器),次服务器C(腾讯云服务器),三者均安装nginx/mysql/php7.2
测试域名:www.830.com
A服务器ip:127.0.0.1(如果不是使用本地服务器,请进行域名解析)
B服务器ip:##.45.##.2(阿里云服务器)
C服务器ip:##.##.38.3(腾讯云服务器)
2.思路:
将A服务器作为主服务器,域名直接解析到127.0.0.1上(即为在host中添加127.0.0.1 www.820.com),由A服务器负债均衡到B和C服务器上
域名解析:
在win系统下,win+R调出命令行,输入命令ping www.830.com看是否设置成功
命令成功界面
C:\Users\Administrator>ping www.830.com
正在 Ping www.830.com [127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
127.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
3.nginx配置
A配置:
修改nginx.conf文件(位置在nginx安装目录的conf目录中)
在http段加入以下代码:
#负载均衡
upstream www.830.com {
server 81.68.124.227:80;
server 47.106.93.197:80;
}
server{
listen 80;
server_name www.830.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://www.830.com;
proxy_redirect off;
}
}
可直接加入到server localhost 上面,保存重启nginx
BC配置,同样文件nginx.conf
server{
listen 80;
server_name www.830.com;
index index.html;#根目录下生成index.html用以识别是否负载成功
root /data0/htdocs/www;#项目根目录
}
保存重启nginx
注意:为了识别是否负载均衡成功,请在三个服务器的根目录下生成不同的index.html文件,用以区分转向的服务器
4.测试:
在本地浏览器输入www.830.com,多次刷新会显示不同的界面
提醒:因为我使用的是本地加服务器域名,所以我这边会出现一个麻烦,就是刚调试完过一会就会被封,要求备案,无法使用;但这是使用本地,要是使用备案过的域名就不会出现这个问题了;
网站暂时无法访问
该网站未根据工信部相关法律规则进行备案
5.将主服务器也作为应用服务器使用,需要添加配置
因为80端口已经被占用,选择另一个端口使用
修改nginx配置文件,添加server
listen 8080;
server_name www.830.com;
index index.html;
root "D:/phpStudy/PHPTutorial/WWW"; #项目根目录
}
然后在刚刚A主服务器配置负载均衡中添加一条信息
#负载均衡
upstream www.830.com {
server 81.68.124.227:80;
server 47.106.93.197:80;
server 127.0.0.1:8080;
}
即可
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上
此文档已实测,可行,测试时间2020-07-03 11:31:20!