Nginx
1.Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1.反向代理
反向代理:指的是用户要访问youtube,但是youtube悄悄地把这个请求交给后台N台服务器中的其中一台来做,这种方式就是反向代理了。
2.负载均衡策略
1)使用硬件负载均衡策略,如使用F5,Array等负载均衡器.
2)使用软件进行负载均衡
3)如使用阿里云服务器均衡SLB
4)使用我们今天所学习的Nginx+Keepalived
5)其他软件负载均衡如LVS(Linux Virtual Server),haproxy等技术
3.Nginx优点:
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。
Nginx 的源代码使用 2-clause BSD-like license。
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主 机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感 谢Nginx为我们选择了 epoll and kqueue作为开发模型。
4.环境搭建:
步骤:
1.进行安装:tar -zxvf nginx-1.6.2.tar.gz -C /usr/local
2.下载所需要的依赖库文件:
yum install pcre -y
yum install pcre-devel -y
yum install zlib -y
yum install zlib-devel -y
3.进行configure配置,查看是否报错
cd nginx-1.6.2
./configure --prefix=/usr/local/nginx
4.编译安装:make && make install
5.在 /usr/local/nginx目录下,可以看到如下4个目录
conf配置文件,html网页文件,logs日志文件,sbin主要二进制程序
6.启动命令:/usr/local/nginx/sbin/nginx
关闭命令:/usr/local/nginx/sbin/nginx -s stop
重启命令:/usr/local/nginx/sbin/nginx -s reload
7.访问浏览器:http://192.168.122.133(看到欢迎页面说明没问题)
注意:如果出现这个错误:./configure: error: C compiler cc is not found
执行这个命令:yum -y install gcc gcc-c++ autoconf automake make
2.常用配置
2.1虚拟主机配置
nginx虚拟主机配置: 配置端口号,访问地址,访问默认路径
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
2.2 日志文件
将nginx访问日志放在log/host.access.log下,并且使用main格式,可以支持自定义位置名字
对于main格式配置如下:
#日志文件输出格式这个位置相当于全局设置
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
查看日志内容命令:tail -n 100 -f access.log
2.3 location配置
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
location / {
#规则H
}
那么产生的效果如下:
http://localhost/ A
http://localhost/login B
http://localhost/register H
http://localhost/static/a.html H C
http://localhost/a.gif D
http://localhost/b.jpg D
http://localhost/static/c.png E C
http://localhost/a.PNG H E
http://localhost/a.xhtml G H
http://localhost/a.XHTML F
http://localhost/category/id/1111 H
2.4 反向代理配置
配置反向代理:
proxy_pass url;
注意:反向代理之后,获取客户端ip地址为nginx服务器地址,这里需要nginx进行forward,设置真实的ip地址:
#设置客户端真实ip地址
proxy_set_header X-real-ip $remote_addr;
2.5负载均衡配置
轮询,权重,ip_hash
#设定负载均衡的服务器列表
#upstream myproject {
#weigth参数表示权值,权值越高被分配到的几率越大
#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
#}
#webapp
#upstream myapp {
# server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s;
# server 192.168.122.134:8080 weight=1 max_fails=2 fail_timeout=30s;
#}
3.搭建高可用环境
Keepalived简介
安装keepalived
修改Master配置
修改Slave配置
首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要防止服务器单点故障的问题,可以通过其与Nginx的配合实现web服务器端的高可用.
Keepalived以VRRP协议为实现基础,使用VRRP协议来实现高可用性(HA).VRRP(Virtual Router Redundacy Protocol)协议用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,向外提供虚拟路由IP(一个或多个),如下图所示:
3.1安装步骤
第一步:安装keepalived依赖的包
yum install -y gcc
yum install -y openssl-devel
yum install -y libnl3-devel
yum install -y popt-devel
yum install -y iptables-devel
yum install -y libnfnetlink-devel
yum install -y psmisc
第二步:编译安装keepalived
将keepalived的安装包 上传到/usr/local/software 目录下
cd /usr/local/software
tar -zxvf keepalived-1.2.19.tar.gz -C /usr/local
cd /usr/local/keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make && make install
第三步:将 keepalived 安装成 Linux 系统服务
安装完成之后, 需要做一些工作复制默认配置文件到 默认路径
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cd /usr/local/keepalived-1.2.19
cp ./keepalived/etc/init.d/keepalived.init /etc/init.d/
chmod 755 /etc/init.d/keepalived.init
第四步:编写nginx检测脚本:
vi /etc/keepalived/nginx_check.sh
内容如下:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
赋予执行权限
chmod +x /etc/keepalived/nginx_check.sh
3.2 master 主机
修改keepalived的Master配置文件:vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id wolfcode ##路由器标志
}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2 #检测时间间隔
weight -20 #条件成立 权重减20
}
vrrp_instance PROXY {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state MASTER
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
unicast_src_ip 192.168.117.130
# 设置优先级,确保主节点的优先级高过备用节点
priority 100
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass wolfcode
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.117.110 #虚拟ip配置完之后就用它访问
}
}
3.3 slave 分机
修改keepalived的Slave配置文件:vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id wolfcode ##路由器标志
}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2 #检测时间间隔
weight -20 #条件成立 权重减20
}
vrrp_instance PROXY {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state BACKUP
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
unicast_src_ip 192.168.117.133
# 设置优先级,确保主节点的优先级高过备用节点
priority 90
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass wolfcode
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.117.110 #虚拟ip配置完之后就用它访问
}
}