一、源码编译安装nginx
安装gcc pcre依赖性 openssl依赖性
yum install -y gcc pcre-devel openssl-devel
解压nginx安装包,定制安装
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1
查看编译帮助
./configure --help
安装常用功能
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make一下
make
make install 一下
make install
查看端口,发现nginx未开启
netstat -antlp
开启nginx,再次查看端口,发现开启
cd /usr/local/nginx/sbin
./nginx
关闭服务,创建软链接,方便全局开启
./nginx -s stop
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx
为了确保安全,关闭c语言编译debug
nginx -s stop
vim ~/nginx-1.20.1/auto/cc/gcc
安装目录下清空缓存
make clean
修改相关配置使其不显示版本
vim ~/nginx-1.20.1/src/core/nginx.h
查看
curl -I localhost
查看修改后运行的nginx大小
du -h /usr/local/nginx/sbin/nginx
设置nginx开机启动
vim /usr/lib/systemd/system/nginx.service
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
刷新服务列表,开机启动
systemctl daemon-reload
systemctl enable --now nginx
二、修改进程的属主
增加一个nginx用户
useradd -M -d /usr/loacl/nginx -s /sbin/nologin nginx
修改nginx安装目录的nginx.conf
vim /usr/local/nginx/conf/nginx.conf
查看
ps ax | grep nginx
三、并发优化
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
修改工作进程数为自动,模块会自动检测
添加控制多核cpu的线程模块worker_cpu_affinity
查看内核支持的最大文件打开数
sysctl -a |grep file
查看系统支持的最大文件打开数
ulimit -a
修改进程能并发处理的最大连接数
最大连接数按优先级排序
内核支持最大文件打开数 > 系统支持最大文件打开数 > Worker支持最大文件打开数
修改系统的最大文件打开数
vim /etc/security/limits.conf
四、nginx平滑升级
准备nginx-1.21.1的安装包,解压
tar zxf nginx-1.21.1.tar.gz
cd nginx-1.21.1
修改相关配置,瘦身nginx
vim auto/cc/gcc
配置安装
./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx
make
不要make install,保存备份老版本nginx,覆盖安装目录下的老的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-old
\cp -f objs/nginx /usr/local/nginx/sbin/nginx
获取当前nginx主进程pid
ps ax|grep nginx
干掉master进程
kill -USR2 pid
关闭原worker进程但保留主进程,目的是有机会可以回退
kill -WINCH 老的master的id
五、nginx负载均衡
需要三台虚拟机来进行实验, 将安装好的nginx目录使用scp命令通过ssh传输,使用systemctl来控制nginx,告诉 Systemd 怎么启动这个 Unit
其余两台执行
scp -r /usr/local/nginx/ server2:/usr/local/nginx/
scp /usr/lib/systemd/system/nginx.service server2:/usr/lib/systemd/system/
配置nginx步骤参上
修改默认发布页为本机server号
echo serverx > /usr/local/nginx/html/index.html
回到server1,使用nginx的http upstream 模块实现客户端访问后端的负载均衡,在http加入upstream模块,模块命名为westos
vim /usr/local/nginx/conf/nginx.conf
刷新服务,加入地址解析
测试访问
for i in {1..10}; do curl www.westos.org; done
装修改权重,再次测试,发现172.25.34.2的权重为2,有三分之二的几率被访问
测试
加入backup,只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
使用nginx sticky实现基于cookie的负载均衡
关闭nginx服务,装一个插件nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
下载unzip压缩工具,并且解压文件
yum install unzip -y
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
进入到nginx的源码编译目录,带上模块–add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
执行make,不install,可以看到nginx从928到936 说明插件安装完成
新的nginx覆盖旧的nginx,重启nginx
cp -f objs/nginx /usr/local/nginx/sbin/nginx
浏览器访问server1
在浏览器中删掉cookie,重新访问