一、nginx源码下载及配置
1.下载nginx压缩包并解压
在真机上下载nginx压缩包
发送到server1上并解压
1.scp kiosk@172.25.8.250:/home/kiosk/Desktop/nginx-1.20.1.tar.gz .
2. nginx的./configure安装脚本配置
configure的’–prefix’会制作出makefile(安装路径)
(1)[root@server1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module ###脚本配置参数
yum install -y gcc ###报错,缺少c语言
yum install -y pcre-devel ###缺少pcre
yum install -y openssl-devel ###缺少openssl
(2)[root@server1 nginx-1.20.1]# make ###编译
(3)[root@server1 nginx-1.20.1]# make install ###安装
make ###编译
make install ###安装
检测语法和相应目录,查看安装路径,建立软链接
启动nginx
[root@server1 sbin]# nginx ##启动(重复启动会报错)
[root@server1 sbin]# nginx -s reload ###刷新
[root@server1 sbin]# nginx -s stop ###关闭
[root@server1 sbin]# curl localhost ###访问nginx
在网页访问本机,会有nginx页面
二.nginx的负载均衡及健康监测(/usr/local/nginx/conf/)
vim nginx.conf
nginx -t ###检测语法
nginx -s reload ###刷新
编辑配置文件,将worker_processes改为2,此时nginx的工作数为2,但是为两个内核随机使用。如果将worker_processes改为auto,将会根据内核数量进行匹配
上述方式存在弊端,不能做到一个内核负责一个worker,所以需要将内核和worker进行绑定,同时修改worker_connections:65535(并发数)
ulimit -a 查看file大小依然为1024
vim /etc/security/limits.conf 添加:nginx - nofile 65535
useradd nginx ###新建用户nginx,切换到nginx用户,ulimit -a 查看file大小为65535 usermod -s /sbin/nologin nginx ###nginx用户只在server1上调用nginx,所以将其登陆功能禁掉 vim nginx.conf ##将第一行user改为nginx用户和nginx组 ps axu ###查看nginx的worker用户是否为nginx,其中master负责调用
events下:use epoll
http下加入ip:westos组中有2和3
反向代理:当访问www.westos.org时,直接访问2和3
在浏览器所在主机添加地址解析:172.25.8.1 server1 www.westos.org
测试:在真实主机上:curl www.westos.org------>报错502:服务本身拒绝------->2和3上未开启httpd
开启后出现轮叫
关闭3,只有2在被访问
关闭2和3的httpd,在1中下载httpd并在配置文件中修改端口为8080,默认发布目录中写入server1,启动httpd------>curl localhost:8080---->server1
编辑nginx配置文件,在http下加入ip:172.25.8.1:8080 backup;(backup为备用),将nginx进行reload
测试:真实主机 curl www.westos.org------->server1
开启2的httpd,curl之后只有2,只要2和3有一个没down掉,1就不会启用
三.权重和哈系算法
1.权重:
vim nginx.conf-------->server 172.25.8.2:80 weight=2;(2号上权重为2,默认为1)
reload之后测试:2比3多两倍
2.哈系算法:
vim nginx.conf-------->ip_hash;
四.第三方模块sticky
sticky模块与Ip_hash都是与负载均衡算法相关,但又有差别,差别是:
1.ip hash,根据客户端的IP,将请求分配到不同的服务器上
2.sticky,根据服务器给客户端的cookie,客户端再次请求时会带上此cookie,nginx会把有此cookie的请求转发到颁发cookie的服务器上
注意:在一个局域网内有3台电脑,他们有3个内网IP,但是他们发起请求时,却只有一个外网IP,是电信运营商分配在他们连接那个路由器上的,如果使用 ip_hash 方式,则Nginx会将请求分配到不同上游服务器,如果使用 sticky 模块,则会把请求分配到办法cookie的服务器上,实现:内网nat用户的均衡。这是iphash无法做到的
Sticky工作原理:
Sticky是基于cookie的一种负载均衡解决方案,通过分发和识别cookie,使来自同一个客户端的请求落在同一台服务器上,默认cookie标识名为route :
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
下载解压
下载unzip解压软件,用unzip命令解压
make clean---->清除之前的Makefile
在./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42 ###添加--add-module模块
ll Makegile
关闭nginx
编辑配置文件:添加sticky并注释(不注释语法会出错)
make ##编译
du -h nginx 查看大小
vim auto/cc/gcc ###编辑c语言文件
—debug后面一行注释----
vim src/core/nginx.h ###编辑nginx头文件
----define NGINX_VER “nginx”(删除版本号)
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42 ###添加--add-module模块
make ##编译
在 /usr/local/nginx/sbin/目录下,备份原文件,将修改后的objs下的nginx文件拷贝过来
cd /usr/local/nginx/conf/------>vim nginx.conf--->删除sticky的注释
nginx -t ##检测语法
nginx ##开启
测试:curl localhost -I------->显示信息中无版本号
五.平滑升级
建立链接:真实主机(下载不需要进行scp)
[root@foundation8 ~]# iptables -t nat -I POSTROUTING -s 172.25.8.0/24 -j MASQUERADE
在server1中下载新版本
[root@server1 conf]# vim nginx.conf -----注释sticky ##显示版本号
lftp 172.25.254.250:/pub/docs/lamp> get nginx-1.20.2.tar.gz ##下载1.20.2版本
将隐藏版本号的nginx文件删除,还原原来的nginx文件
mv nginx nginx.new
rm -f nginx.new
mv nginx.old nginx
tar zxf nginx-1.20.2.tar.gz ###解压
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
cd /usr/local/nginx/sbin/
ls
cp nginx nginx.old ##将20.1的版本复制为old
cd nginx-1.20.2/
\cp -f nginx /usr/local/nginx/sbin/ ###复制20.2的nginx覆盖到20.1的nginx中
ps ax | grep nginx
kill -USR2 17722
ps ax | grep nginx
kill -WINCH 17722
curl -I localhost ###显示20.2的版本
版本回退