Nginx实现负载均衡及配置详解

知识剖析:

  • 什么是Ngnix?

  • Nginx是一个http服务器。是一个使用c语言开发的高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  • 为什么要配置Nginx的负载均衡?

  • 负载均衡是 Nginx常用的一个功能,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

  • 我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。

  • 如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

主机环境:

rhel6.5 selinux and iptables disabled

实验环境:

主机名IP服务
server1172.25.79.1nginx
server2172.25.79.2apache
server3172.25.79.3apache
foundation79172.25.79.250用于测试
  • nginx实现负载均衡配置过程:
  1. 解压nginx的安装包
[root@server1 ~]# tar zxf nginx-1.15.7.tar.gz 
  1. 去掉nginx的版本号
[root@server1 ~]# cd nginx-1.15.7
[root@server1 nginx-1.15.7]# vim src/core/nginx.h
14 #define NGINX_VER          "nginx/"   ##隐藏版本号,防止黑客攻击
  1. 关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)
[root@server1 nginx-1.15.7]# vim auto/cc/gcc 
171 # debug
172 #CFLAGS="$CFLAGS -g"      ##注释掉(关闭debug日至)
  1. 进入解压目录,进行编译
[root@server1 ~]# cd nginx-1.15.7
[root@server1 nginx-1.15.7]# ./configure --prefix=/usr/local/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module 
[root@server1 nginx-1.15.7]# make && make install
  1. 编辑nginx的主配置文件
[root@server1 nginx-1.15.7]# cd /usr/local/nginx/conf/    ##主配置文件的位置
[root@server1 conf]# vim nginx.conf
  2 user  nginx nginx;    ##使用户为nginx用户进行管理
  3 worker_processes  4;     ##nginx的工作进程数,一般设置为cpu核数  ,auto为自动识别cpu核数,但是一般不推荐使用  
  4 worker_cpu_affinity 0001 0010 0100 1000;    

 12 events {
 13     worker_connections  65535;    # 进程最大连接数
 14 }

 17 http {
 18         upstream westos{
 19                 server 172.25.79.2:80;    # 后端服务器server2
 20                 server 172.25.79.3:80;    # 后端服务器server3
 21         }
 22     include       mime.types;
 23     default_type  application/octet-stream;

##在文章最后一个}前面添加
120     server {
121             listen 80;    ### nginx监听80端口
122             server_name www.westos.org;     # 访问域名www.westos.org
123     
124             location / {
125                 proxy_pass http://westos;    #访问上边的虚拟主机
126              }
127     }
  • 打开nginx : ./nginx
  • 关闭nginx : ./nginx -s stop
  • 重新加载nginx : ./nginx -s reload
  • 检查语法错误:./nginx -t
  1. 编辑完配置文件要检测语法错误,并开启nginx
##首先要进入nginx命令的位置,如下
[root@server1 sbin]# pwd
/usr/local/nginx/sbin                          
##检查语法错误
[root@server1 sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful    ##显示成功

##开启nginx
[root@server1 sbin]# ./nginx  
  1. [root@server1 sbin]# ps ax
  • 可以看到有一个master进程,4个worker进程
  • 因为刚才的配置文件中worker_processes 参数设置为4
    在这里插入图片描述
  1. server2和server3上安装httpd服务,开启服务,然后编写默认测试页面内容
[root@server2 bin]# yum install httpd -y
[root@server2 bin]# /etc/init.d/httpd start
[root@server2 ~]# cd /var/www/html
[root@server2 html]# vim index.html
server2
[root@server3 bin]# yum install httpd -y
[root@server3 bin]# /etc/init.d/httpd start
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html
server3

9.在测试主机中添加解析

[root@foundation79 ~]# vim /etc/hosts
172.25.79.1 www.westos.org                           

10.测试:

  • 显示server2,server3轮询被访问到
    在这里插入图片描述

  • 如果server2关闭httpd,则只能访问到server3
    在这里插入图片描述

  • 配置文件解析:

  1. 添加ip_hash(图中不小心遮住了下划线):同一个ip的请求会指定到同一个后端服务器服务器
    注意:此处保证server2和server3 的httpd服务都是开启的
    在这里插入图片描述
  • 注意:编写完配置文件都要记得检查语法是否正确,并重新加载nginx
[root@server1 sbin]# pwd
/usr/local/nginx/sbin
[root@server1 sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 sbin]# ./nginx -s reload
  • 测试:同一台主机,被绑定到同一个后端服务器上(server3)
    在这里插入图片描述
  1. server 127.0.0.1:80 backup; 后端服务器全坏时则访问本机
    在这里插入图片描述
  • 检查语法是否正确,并重新加载nginx
[root@server1 sbin]# pwd
/usr/local/nginx/sbin
[root@server1 sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 sbin]# ./nginx -s reload
  • server1上安装httpd服务,开启服务,并编写默认发布内容
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# /etc/init.d/httpd start
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# mv index.html index.html.back          ##可以将默认发布文件备份

[root@server1 html]# vim index.html
网页正在维护中...
  • 测试:
    关闭server2和server3的httpd
[root@server2 html]# /etc/init.d/httpd stop
[root@server2 html]# /etc/init.d/httpd stop

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值