前言 今天在专题收录一篇关于ngixn与apache2实现负载均衡的文章,仔细看了一遍,有些地方存在错误,记得之前搭建过这样的环境,今天呢,好好记录分享一下。
nginx & apache 简单说说它俩的优点
nginx & apache协作流程 一般而言,我们可以使用nginx以及apache实现集群服务器负载均衡,具体如何实现的呢?它们的工作流程又是如何的呢?
nginx & apache协作流程
Nginx的upstream分发机制 upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。基本有如下几种:
upstream balance{
server localhost:8080;
server localhost:8081;
server localhost:8082;
... ...
}
upstream balance{
server localhost:8080 weight=5;
server localhost:8081 weight=10;
server localhost:8082 weight=15;
... ...
}
upstream balance {
ip_hash;
server localhost:8080;
server localhost:8081;
server localhost:8082;
... ...
}
upstream balance {
fair;
server localhost:8080;
server localhost:8081;
server localhost:8082;
... ...
}
nginx & apache安装
# 对于安装不多说(基于debian/ubuntu)
sudo apt-get install apache2 nginx -y
对于更多的负载均衡理论可以自行搜索,这里旨在实践配置。
环境场景 为了方便配置,所有的服务都是安装在同一台机器上面。
Apache版本:Apache/2.4.7 (Ubuntu) Nginx版本: nginx/1.4.6 (Ubuntu)
配置Apache
前提:将默认的80端口关闭,因为80端口将为nginx所用。将默认的000-default.conf.bak
重命后缀名即可(非conf)。
(1) 开启端口监听允许
在apache端口蒋婷配置文件/etc/apache2/ports.conf
添加如下信息,记得关闭80端口监听。
Listen 8001
Listen 8002
Listen 8003
Listen 8004
(2) 配置虚拟目录映射
个人习惯,将每一个虚拟目录配置写一个配置文件,在这里将新建四个conf文件,对应的配置如下:
/etc/apache2/ites-enabled/8001.conf
<VirtualHost *:8001>
ServerAdmin localhost:8001
DocumentRoot /home/alic/www/proxy/8001
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
/etc/apache2/ites-enabled/8002.conf
<VirtualHost *:8002>
ServerAdmin localhost:8002
DocumentRoot /home/alic/www/proxy/8002
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
剩下的8003.conf、8004.conf就不多说了! (3) 重启Apache,没有问题浏览器就可以直接打开各个端口的访问了
sudo service nginx restart
配置Nginx
(1) upstream
定义一个upstream变量,即定义接收转发的服务器
/etc/nginx/sites-enabled/default
#代理转发地址
upstream balance{
server localhost:8001 weight=5;
server localhost:8002 weight=10;
server localhost:8003 weight=15;
server localhost:8004 weight=20;
}
(2) server
配置监听80端口的server,将请求转发到upstream
/etc/nginx/sites-enabled/default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
location / {
try_files $uri $uri/ =404;
#修改proxy_pass这里即可
proxy_pass http://balance;
}
(3) 重启nginx
sudo service nginx restart
至此,已经配置完成了,我们可以检验检验!!!
➜ ~ curl 127.0.0.1
I am proxy apache2 port 8003
➜ ~ curl 127.0.0.1
I am proxy apache2 port 8004
➜ ~ curl 127.0.0.1
I am proxy apache2 port 8004
➜ ~ curl 127.0.0.1
I am proxy apache2 port 8001
➜ ~ curl 127.0.0.1
I am proxy apache2 port 8001
➜ ~ curl 127.0.0.1
I am proxy apache2 port 8002
... ...