一、Nginx介绍


1、简介

  • Nginx是一个和Apache类似的软件,Nginx是一个开源的,支持高性能、高并发的WWW服务和代理服务软件。他是由俄罗斯人Igor Sysoev开发的,最初背应用在俄罗斯的大型网站www.rambler.ru上。
  • Nginx因具有高并发(特别是静态资源)、占用系统资源少等特性(轻量型),且功能丰富而逐渐流行起来,而Apcahe属于重量型服务,占用资源相对较多。
  • 在功能应用方面,Nginx不但是一个优秀的WEB服务软件,还具有反向代理负载均衡功能和缓存服务功能。在反向代理负载均衡方面,它类似于LVS以及Haproxy等专业软件,但是Nginx部署起来更为简单、方面,其默认方式RR(轮询)。在缓存服务方面有类似于Squid等专业软件。
  • 我们可以通过官网来查看它的信息:中文官网和英文官网

2、Nginx的重要特性

(1)基本特性
  • 可针对静态资源高速高并发访问及缓存。
  • 可使用反向代理加速,并且可进行数据缓存。
  • 具有简单负载均衡、节点健康检查和容错功能。
  • 支持远程FastCGI、Uwsgi、SCGI、Memcached Servers的加速和缓存。
  • 支持SSL、TLS、SNI。
  • 具有模块化的构架:过滤器包括gzip压缩、range支持、chunked响应、XSLT、SSI及图像缩放等功能。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理。
(2)www服务特性
  • 支持基于名字、端口及IP的多虚拟主机站点。
  • 支持keep-alive和poplined连接。
  • 可进行简单、方便、灵活的配置和管理。
  • 支持修改Nginx配置,并且在代码上线时,可平滑启动(reload),不中断业务访问。
  • 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsylog处理日志。
  • 可利用信号控制Nginx进程。
  • 支持3xx-5xx HTTP状态码重定向。
  • 支持rewrite模块,支持URI重写及正则表达式匹配。
  • 支持基于客户端IP地址和HTTP基本认证的访问控制。
  • 支持PUT、DELETE、MKCOL、COPY及MOVE等较特殊的HTTP请求方法。
  • 支持FLV流和MP4流技术产品应用。
  • 支持HTTP相应速率限制。
  • 支持同一IP地址的并发连接或请求数限制。
  • 支持邮件服务代理。

3、Nginx与Apache区别

  • Apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程 。
  • Nginx的负载能力比Apache高很多。
  • Nginx的处理动态能力很差,一般使用Apache来做动态页面。
  • Apache用的是select模型,Nginx使用的是epoll模型;用网上很经典的一个例子解释就是:把整个过程等同于一个男生去女生宿舍找人,楼下有个阿姨;Apache去找人的时候,阿姨会带他去每个房间找人;Nginx是阿姨把每个女生对应的门牌号都记录了下来,在看楼下(即指定的位置)是否有人等待,有人是把门牌号给他让他自己去找。

二、实验环境


注意:selinux iptables off
操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)

1、下载地址

Nginx下载地址:http://nginx.org/en/download.html
Nginx RPM包下载地址:http://nginx.org/packages/rhel/7/x86_64/RPMS/(6的话把7换成6即可)
百度网盘地址: https://pan.baidu.com/s/1NJiPYioi_843WfqMAI4PsA 密码: wdf8

2、安装说明

主机名

IP

安装服务

功能说明

server1

10.10.10.1

Nginx

此处作为负载均衡器

server2

10.10.10.2

Apache

显示WEB页面

server3

10.10.10.3

Apache

显示WEB页面

dream(真机)

10.10.10.250

进行访问测试

3、host解析

[root@server1 ~]# cat /etc/hosts
10.10.10.1 server1
10.10.10.2 server2
10.10.10.3 server3

三、安装Nginx


1、解压tar包

sticky下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz

[root@server1 ~]# wget http://nginx.org/download/nginx-1.14.0.tar.gz
[root@server1 ~]# tar zxf /root/nginx-1.14.0.tar.gz

2、优化安装

(1)关闭版本显示
[root@server1 ~]# vim /root/nginx-1.14.0/src/core/nginx.h    
#define nginx_version      1014000
#define NGINX_VERSION      "1.14.0"
#define NGINX_VER          "nginx"
(2)关闭调试环境
[root@server1 ~]# vim /root/nginx-1.14.0/auto/cc/gcc         
# debug
#CFLAGS="$CFLAGS -g"

3、编译安装

[root@server1 ~]# yum install -y pcre-devel gcc openssl-devel         ###安装依赖
[root@server1 ~]# tar xf nginx-sticky-module-ng.tar.gz                ###sticky模块
[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.14.0]# make && make install
[root@server1 nginx-1.14.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/          ###进行链接

4、检测语法是否正确

[root@server1 nginx-1.14.0]# 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

5、启动Nginx

[root@server1 nginx-1.14.0]# nginx               ###启动Nginx
[root@server1 nginx-1.14.0]# nginx -s stop       ###停止

服务端负载均衡框架 服务器均衡负载软件_服务端负载均衡框架

四、Nginx基础配置


1、配置nginx.conf

[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;                                 ###设置用户
worker_processes  2;                               ###设置cpu
worker_cpu_affinity 01 10;

events {
    worker_connections  65535;                     ###设置最大连接数
}

2、建立用户和设置连接数

[root@server1 ~]# useradd nginx
[root@server1 ~]# vim /etc/security/limits.conf      ####设置最大连接数
nginx           -       nofile          65535
[root@server1 ~]# nginx -s reload                    ###加载配置

3、查看

(1)查看最大连接数
[root@server1 ~]# su - nginx
[nginx@server1 ~]$ ulimit -n
65535
(2)查看cpu
[root@server1 ~]# top
[root@server1 ~]# lscpu

服务端负载均衡框架 服务器均衡负载软件_Nginx调度算法_02

服务端负载均衡框架 服务器均衡负载软件_服务端负载均衡框架_03

五、Nginx负载均衡


默认调度算法:轮询(RR)

1、配置nginx.conf

[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf        ###要写在http模块中
    upstream dream {
        server 10.10.10.2:80;
        server 10.10.10.3:80;
    }

    server {
        listen 80;
        server_name www.dream.com;
        location / {
                proxy_pass http://dream;
        }
    }

[root@server1 ~]# nginx -s reload

2、配置httpd(server2、3)

[root@server2 ~]# yum install -y httpd
[root@server2 ~]# echo server2 >/var/www/html/index.html
[root@server2 ~]# /etc/init.d/httpd restart

3、测试

(1)加入host解析(真机中)
[root@dream ~]# vim /etc/hosts
10.10.10.1  www.dream.com

[root@server2 ~]# /etc/init.d/httpd stop
(2)测试结果
[root@dream ~]# curl www.dreamya.com
server3
[root@dream ~]# curl www.dreamya.com
server2
[root@dream ~]# curl www.dreamya.com
server3
[root@dream ~]# curl www.dreamya.com
server3
[root@dream ~]# curl www.dreamya.com
server3

我们可以发现Nginx自带健康检查,并且服务器恢复时自动加入集群中!!!

六、配置Backup


生产应用场景:当server2、3(即生产中后端服务器)都挂掉(维护)时,server1(调度服务器)来接管,但是不处理业务请求,给出相对应的提示!!!

1、配置Nginx Backup
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf  
    upstream dream {
        server 10.10.10.2:80;
        server 10.10.10.3:80;
        server 127.0.0.1:8080 backup;           ###使用server1作备机
    }

    server {
        listen 80;                              ###监听端口
        server_name www.dream.com;
        location / {
                proxy_pass http://dream;
        }
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
                root /backup;                   ###默认发布目录
                index index.html;               ###默认发布文件
                charset utf-8;                  ###设置字符编码,也可以写在location上面
        }
    }

2、建立访问目录

[root@server1 ~]# mkdir /backup
[root@server1 ~]# echo "站点维护中....." >/backup/index.html
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
[root@server1 ~]# nginx -s reload

3、测试

(1)关闭httpd(server2、3)
[root@server2 ~]# /etc/init.d/httpd stop
(2)测试结果
[root@dream ~]# curl www.dream.com
站点维护中.....
[root@dream ~]# curl www.dream.com
站点维护中.....

七、常用调度算法


注意:其默认的算法RR就不介绍了!!!

1、权重配置(WRR)

算法介绍:此种情景可以用于生产中服务器的硬件性能差别比较大,实现访问的相对均衡!!!

(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf

服务端负载均衡框架 服务器均衡负载软件_sticky_04

(2)查看结果
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done

服务端负载均衡框架 服务器均衡负载软件_Nginx_05

2、配置least_conn

算法介绍:访问服务器中较空闲的服务器!!!

(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf

服务端负载均衡框架 服务器均衡负载软件_服务端负载均衡框架_06

(2)重新加载配置
[root@server1 ~]# nginx -s reload
(3)结果

测试你会发现结果和轮询没有区别,因为没有并发,所以不会访问最小连接数!!!

3、配置ip_hash

算法介绍:会根据IP访问服务器,一个IP会访问到同一个服务器!!!

(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf

服务端负载均衡框架 服务器均衡负载软件_Nginx调度算法_07

(3)结果
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done

服务端负载均衡框架 服务器均衡负载软件_Nginx调度算法_08

4、配置URL哈希

算法介绍:当URL相同时,访问时会调度到相同的服务器!!!

(1)环境恢复

服务端负载均衡框架 服务器均衡负载软件_sticky_09

[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done

服务端负载均衡框架 服务器均衡负载软件_Linux_10

(2)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf

服务端负载均衡框架 服务器均衡负载软件_sticky_11

(3)查看结果
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done

服务端负载均衡框架 服务器均衡负载软件_sticky_12

5、配置sticky

算法介绍:Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过识别浏览器cookie来识别是否来自同一客户端,从而落在同一台服务器上,默认标识名为route!!!

(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf

服务端负载均衡框架 服务器均衡负载软件_sticky_13

[root@server1 ~]# nginx -s reload
(2)查看结果

通过浏览器设置里面勾选storage(存储),查看cookie!!!

服务端负载均衡框架 服务器均衡负载软件_Nginx_14