1、安装Nginx
1:去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本。
2:上传nginx到linux系统
3:安装依赖环境
(1)安装gcc环境
yum install gcc-c++
(2)安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
(3)zlib压缩和解压缩依赖
yum install -y zlib zlib-devel
(4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
4. 解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.16.1.tar.gz
5. 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
6. 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure \--prefix=/usr/local/nginx \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--with-http_gzip_static_module \--http-client-body-temp-path=/var/temp/nginx/client \--http-proxy-temp-path=/var/temp/nginx/proxy \--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \--http-scgi-temp-path=/var/temp/nginx/scgi
7. make编译
make
8. 安装
make install
9. 进入sbin目录启动nginx
./nginx
停止:./nginx -s stop
重新加载:./nginx -s reload
10. 打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示如下便表示安装成功
注意事项:
1. 如果在云服务器安装,需要开启默认的nginx端口:80
2. 如果在虚拟机安装,需要关闭防火墙
3. 本地win或mac需要关闭防火墙
2、Nginx的Location匹配规则
1. location分为正则和非正则。
~和~*为正则location;=、^~、@和无任何前缀的都属于普通location
2.官网描述的匹配顺序
1.先普通,再正则。
2.普通location之间的匹配顺序:按最大前缀匹配。
如location /a/{},location /a/b/ {},请求 http://a/b/c.html 匹配的是location /a/b/ {}。
3.正则location之间的匹配顺序:按配置文件中的物理顺序匹配,只要匹配到一条正则,就不再考虑后面的
4.普通location与正则location之间的匹配结果选择:
普通location先匹配,匹配到了结果,只是一个临时结果;会继续正则location的匹配,如果匹配到正则,则用匹配到的正则结果;如果没有匹配到正则,则继续用普通匹配的那个结果
综上,常规的顺序是匹配完普通location,还要继续匹配正则location,但是,也可以告诉nginx,匹配到了普通location,就不要再搜索匹配正则location了,通过在普通location前面加上^~符号,^表示非,~表示正则,^~就是表示不要继续匹配正则。
除了^~,=也可阻止nginx继续匹配正则,区别在于^~依然遵循最大前缀匹配规则,而=是严格匹配。
3、Nginx 日志切割
现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把 文件切割为多份不同的小文件作为日志,切割规则可以以 天 为单位,如果每天有几百G或者几个T的日志的话,则可以按需以 每半天 或者 每小时 对日志切割。
具体步骤如下:
手动方式切割:
1. 创建一个shell可执行文件: cut_my_log.sh ,内容为:
#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1 `cat $PID`
2. 为 cut_my_log.sh 添加可执行的权限: chmod +x cut_my_log.sh
3. 测试日志切割后的结果: ./cut_my_log.sh
使用定时任务:
1. 安装定时任务: yum install crontabs
2. crontab -e 编辑并且添加一行新的任务:
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
3. 重启定时任务: service crond restart
4、Nginx 跨域配置支持
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
5、Nginx 负载均衡详解
可以参考一下这篇文章:
6、Nginx 配置keepalived双机主备
1.解压keepalived压缩包
tar -zxvf keepalived-2.0.18.tar.gz
2.在keepalived目录,输入如下命令进行配置
./configure --prefix=/usr/local/keepalived --sysconf=/etc
配置时报警告:
Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS
解决方法:
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
3.重新执行步骤2
4.安装keepalived
make && make install
5.查看keepalived安装目录
whereis keepalived
如下图所示:
6.进入/etc/keepalived,修改vi keepalived.conf
修改为下面内容:
global_defs {
router_id keep_132 #节点标识符,全局唯一
}
vrrp_instance VI_1 {
state BACKUP #主节点为MASTER 备用节点BACKUP
interface ens33 #当前机器网卡名称
virtual_router_id 51 #保证主备一致,目前默认51
priority 80 #优先级,权重。权重越高,MASTER挂掉后,就能成为MASTER
advert_int 1 #主备之间同步检查时间间隔,默认1秒
authentication { #认证授权用户名和密码,防止非法节点进入。目前使用默认
auth_type PASS
auth_pass 1111
}
#虚拟ip
virtual_ipaddress {
192.168.32.133
}
}
备注:需要修改的地方已经标成红色
验证是否配置成功:
1.启动keepalived
进入keepalived安装目录,输入命令 ./keepalived
2.查看虚拟IP是否绑定成功
输入 ip addr 命令查看ip
3.访问虚拟IP
使用配置的虚拟ip能正常访问,验证成功。
4.配置keepalived为系统服务,进入keepalived源文件目录。
cp init.d/keepalived /etc/init.d/
7、keepalived 配置Nginx自动重启
当nginx服务挂掉之后,keepalived服务正常运行的情况下,通过虚拟IP访问,页面会报错,并不会跳转到备用Nginx服务上去,所以一般使用keepalived执行脚本让Nginx自动重启,如果重启失败,停止本机keepalived服务,这时请求就会跳转到备用nginx服务上了。
1.编写重启脚本文件
vim /etc/keepalived/check_nginx_alive_or_not.sh
内容如下:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #这个目录文件为nginx启动文件
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
2.给文件增加权限
chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
3.配置keepalived监听nginx脚本:
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行失败,则升级权重+10
}
4.在 vrrp_instance 中新增监控的脚本(重要)
track_script {
check_nginx_alive # 追踪 nginx 脚本
}
5.重启Keepalived使得配置文件生效
systemctl restart keepalived
6.验证结果:
当手动关闭nginx服务后使用虚拟IP访问如果还能正常访问,那么验证通过。
6、keepalived 配置Nginx双主热备
如果配置keepalived双机热备,如果MASTER节点不出问题,BACKUP节点就不会工作,就会有一个资源浪费的问题。所以引出keepalived配置Nginx双主热备方案。一句话总结:两台主机,互相是对方的备份机(BACKUP节点),又互相是对方的主机(MASTER节点)。
配置步骤:
1.复制keepalived配置文件中实例。参考如下:
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 52 虚拟路由,主备节点必须一致
priority 100 #主节点比备用节点数值大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.32.10 #虚拟IP
}
}
备注:需要修改的地方已经使用红色标注