nginx: 下载
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install gcc-c++
yum install -y openssl openssl-devel
tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
./configure
make && make install
默认安装目录
/usr/local/nginx
脚本目录
/usr/local/nginx/sbin
启动nginx 默认就会带 /usr/local/nginx/conf/nginx.conf
./nginx
查看版本
./nginx -v
停止ngin
./nginx -s stop
不需要重启也可以加载nginx.conf
./nginx -s reload
配置文件路径
./nginx -t
指定配置文件
#启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx_my.conf
#重启
/usr/local/nginx/sbin/nginx -s reload -c /usr/local/nginx/conf/nginx_my.conf
#停止
/usr/local/nginx/sbin/nginx -s stop -c /usr/local/nginx/conf/nginx_my.conf
这俩进程
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/c78b7dd79d0d099e359c5c4394d13c9317b9348f.tar.gz
重新编译后,会出现全新的nginx, 及时保存好你以前的 nginx.conf
我上传的目录是 /usr/local/data
以前安装nginx的目录是 /usr/local/nginx
nginx解压目录是 /usr/local/data/nginx-1.22.0
tar -zxvf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz
cp /usr/local/nginx/conf/nginx.conf /usr/local/data/
#include
#include
yum install -y openssl-devel
讲解:将sticky模块 安装到 /usr/local/nginx
./configure --prefix=/usr/local/nginx/ --add-module=/usr/local/data/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d
make
编译后的东西都在这个目录下
cd objs/
覆盖掉启动脚本
cp nginx /usr/local/nginx/sbin/
http {
upstream myserver {
sticky;
server 192.168.135.128:8080;
server 192.168.135.4:8080;
}
}
例如:加载一个html可能要加载很多js,假如需要三个js,就会多3个请求js的请求。为了提高效率,可以合并为一个请求,同时获取这三个js. 淘宝就是这样的。因为是淘宝开发的。
下载 上传到/usr/local/data/
https://github.com/alibaba/nginx-http-concat/archive/refs/heads/master.zip
解压
unzip nginx-http-concat-master.zip
原解压目录 /usr/local/data/nginx-1.22.0
原nginx默认安装目录是/usr/local/nginx/
cd /usr/local/data/nginx-1.22.0
./configure --prefix=/usr/local/nginx/ --add-module=/usr/local/data/nginx-http-concat-master
重新编译,make install 会覆盖掉以前安装过得模块
make
编译后的东西都在这个目录下
cd objs/
覆盖掉启动脚本
cp nginx /usr/local/nginx/sbin/
https://github.com/alibaba/nginx-http-concat/archive/refs/heads/master.zip
location /static/css/ {
concat on; #开启
concat_max_files 20; #最多20个
}
location /static/js/ {
concat on;
concat_max_files 30;#最多30个
}
重新编译后,会出现全新的nginx, 及时保存好你以前的 nginx.conf
我上传的目录是 /usr/local/data
以前安装nginx的目录是 /usr/local/nginx
nginx解压目录是 /usr/local/data/nginx-1.22.0
讲解:将sticky模块 安装到 /usr/local/nginx
./configure --prefix=/usr/local/nginx/ --with-stream
make
编译后的东西都在这个目录下
cd objs/
覆盖掉启动脚本
cp nginx /usr/local/nginx/sbin/
配置文件修改 stream和 http是平级模块 ,要写在http模块外面
# stream属于最顶层的配置
stream {
upstream mysqlserver {
server 192.168.35.120:3306;
}
server {
listen 3306;
#proxy_connect_timeout 10s;
#代理时间默认10分钟,在这个时间范围内,没有数据传递,就会关闭连接,如果这个时间设置短,就会在该主机上产生大量的FIN_WAIT2和TIME_WAIT状态的tcp连接,连接的复用率会变低
#proxy_timeout 10m;
# 这里的proxy是stream-proxy模块,不是http-proxy
proxy_pass mysqlserver;
}
}
http {
}
单机模式下也可以考虑安装keepalived 他可以检测nginx是否启动,执行脚本让nginx自动启动。短暂的访问失效
1:准备两台服务器 ,192.168.135.4,192.168.135.128
2:在这两台服务器上都需要安装nginx,和keppalived
3:主机和从机的keppalived,只有 priority ,state
4:先启动nginx 在启动keppalived。
5:对外访问的ip: 192.168.135.9
yum安装方式:默认安装位置 etc/keepalived/keepalived.conf
yum install keepalived -y
主从配置 修改属性位置:priority,state
注意:每个模块名和 { 要有一个空格,
日志文件默认位置是系统日志:/var/log/messages 查看脚本不启动等等都需要看日志
! Configuration File for keepalived
#全局定义
global_defs {
# email通知,用于服务有故障时发送邮件报警 可选项,不建议用。需系统开启sendmail服务,建议用第三方独立监控服务。
notification_email {
[email protected]
[email protected]
[email protected]
}
#指定发件人,可选配置。
notification_email_from [email protected]
# 指定发送邮件的smtp服务器地址,可选配置。
smtp_server 192.168.200.1
smtp_connect_timeout 30 # 连接smtp的超时时间
router_id LVS_DEVEL #用户标识本节点的名称
}
#声明检查脚本
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2 #检测脚本执行的间隔 监控脚本的执行时间要大于advert_int(3秒不行就5秒
weight 2
}
# 定义一个vrrp_install实例,名称为VI_1
vrrp_instance VI_1 {
state MASTER # 实例的角色状态,主机 AMSTER 从机 BACKUP
interface ens33 # 对外提供服务的网络接口,如eth0,eth1.
virtual_router_id 51 #虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致,否则将出现脑裂问题。
priority 100 # priority表示实例优先级,数字越大,优先级越高 主机高于从机
advert_int 1 # advert_int为同步通知间隔。主备之间通信检查的时间间隔,默认为1秒。
# 权限认证配置。
authentication { #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_type PASS
auth_pass 1111
}
# 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中需要和域名绑定的ip,
# 即可配置的高可用服务监听的ip保持一致。
virtual_ipaddress {
192.168.135.9 # 对外访问的ip
}
# 启动脚本 必须和上面的声明 名称一致
track_script {
chk_nginx #执行 Nginx 监控的服务
}
}
1:脚本加权限: chmod u+x nginx_check.sh
chmod 744 nginx_check.sh
2:先执行一下脚本,看是否是可执行脚本。
3:脚本详解,先查看nginx是否启动,没有启动会执行启动命令,过了2秒还没有启动成功,会关闭 keepalived 服务,因为不关闭它,无法从主服务器切换到从服务器
4 解决脚本不执行 参考 keepalived配置检测脚本问题 - 知乎
#!/bin/bash
# echo 1 >> myid
A=`ps -C nginx --no-header |wc -l`
# 如果等于0 就 nginx没有启动
if [ $A -eq "0" ];then
cd /usr/local/nginx/sbin/
./nginx
sleep 2
# 如果等于0 就 nginx没有启动 keepalived也必须关闭,否则依然访问不到从nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
# killall keepalived
systemctl stop keepalived.service
fi
fi
1:脚本必须执行: chmod u+x nginx_check.sh
chmod 744 nginx_check.sh
2:暂时版:setenforce 0
永久版: sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
启动nginx 和 keepalived
./nginx
启动 keepalived
systemctl start keepalived.service
停止 keepalived
systemctl stop keepalived.service
重启
systemctl restart keepalived.service
验证
直接访问 http://192.168.135.9/
关闭主服务器上的 nginx 不关闭 keepalived 。依然不能访问到从nginx. 报错。所以脚本上必须也要关闭keepalived
关闭主服务器上的nginx,和 keepalived 。可以访问到从服务器的nginx