最近看一些高并发解决方案,了解了一些常见的处理方案,其中很多方案仍需要在实践中不断使用才能深刻理解。今天使用nginx实现了对某个网站的负载均衡。
环境准备
nginx+php,这个不多说。如未配置,可以参考wnmp环境配置,这个写的比较清晰简单。
第一步 配置测试域名
首先在nginx下配置一个域名(load-balance.com),监听某个端口(10001),用来测试,并在路径(E:/wnmp/code/load-balance)下放一个用于测试的html文件,这里我使用的是nginx的欢迎页面
配置如下:
server {
listen 10001;
server_name load-balance.com;
location / {
root E:/wnmp/code/load-balance;
index index.html index.htm index.php;
}
location ~ \.php$ {
root E:/wnmp/code/load-balance;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
第二步 配置多服务器
首先,因为使用的是同一台机器,所以,通过多端口来模拟实现多服务器。配置三个监听其它端口(8081,8082,8083)的server 。
配置如下:
server {
listen 10081 default_server;
server_name _;
root E:/wnmp/code/load-balance;
index index.html index.htm index.php;
location /
{
add_header REAL_SERVER 10081;
}
}
server {
listen 10082 default_server;
server_name _;
root E:/wnmp/code/load-balance;
index index.html index.htm index.php;
location /
{
add_header REAL_SERVER 10082;
}
}
server {
listen 10083 default_server;
server_name _;
root E:/wnmp/code/load-balance;
index index.html index.htm index.php;
location /
{
add_header REAL_SERVER 10083;
}
}
其中 add_header REAL_SERVER 8083; 是在头信息中增加一个标识来区别不同的server。
第三步 增加一组新的负载组(是自己的理解,这么叫了 意会就行)
在http中增加配置(如果是多台独立服务器,把server对应的域名和端口换掉即可),如下
http {
...
upstream load_balance_cluster
{
server 127.0.0.1:10081 weight=11;
server 127.0.0.1:10082 weight=12;
server 127.0.0.1:10083 weight=13;
}
...
}
upstream 是关键字,load_balance_cluster类似变量,随便起的,后面的weight是比重,可以不写,默认相同,即使用三个server的概率相同。
第四步 在配置中是用负载组
在第一步的域名配置中,在location下增加 proxy_pass http://load_balance_cluster;
修改后具体配置如下:
server {
listen 10001;
server_name load-balance.com;
location / {
proxy_pass http://load_balance_cluster;
root E:/wnmp/code/load-balance;
index index.html index.htm index.php;
}
location ~ \.php$ {
root E:/wnmp/code/load-balance;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
配置完成,测试 load-balance.com:10001。如下图
看到在header里 REAL_SERVER 分别是 10083、10082、10081,实现将一个网站使用三个不同server进行负载。