一、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负载均衡
默认调度算法:轮询(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
(2)查看结果
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done
2、配置least_conn
算法介绍:访问服务器中较空闲的服务器!!!
(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
(2)重新加载配置
[root@server1 ~]# nginx -s reload
(3)结果
测试你会发现结果和轮询没有区别,因为没有并发,所以不会访问最小连接数!!!
3、配置ip_hash
算法介绍:会根据IP访问服务器,一个IP会访问到同一个服务器!!!
(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
(3)结果
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done
4、配置URL哈希
算法介绍:当URL相同时,访问时会调度到相同的服务器!!!
(1)环境恢复
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done
(2)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
(3)查看结果
[root@server1 ~]# nginx -s reload
[root@dream ~]# for i in {1..6};do curl www.dream.com;done
5、配置sticky
算法介绍:Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过识别浏览器cookie来识别是否来自同一客户端,从而落在同一台服务器上,默认标识名为route!!!
(1)配置nginx.conf
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
[root@server1 ~]# nginx -s reload
(2)查看结果
通过浏览器设置里面勾选storage(存储),查看cookie!!!