Linux实战笔记-----lamp架构之nginx源码编译

一、源码编译安装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	

Linux实战笔记-----lamp架构之nginx源码编译

make一下

make

make install 一下

make install

Linux实战笔记-----lamp架构之nginx源码编译

查看端口,发现nginx未开启

netstat -antlp

Linux实战笔记-----lamp架构之nginx源码编译

开启nginx,再次查看端口,发现开启

cd /usr/local/nginx/sbin
./nginx

Linux实战笔记-----lamp架构之nginx源码编译
关闭服务,创建软链接,方便全局开启

./nginx -s stop
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx

Linux实战笔记-----lamp架构之nginx源码编译
为了确保安全,关闭c语言编译debug

nginx -s stop	
vim ~/nginx-1.20.1/auto/cc/gcc

Linux实战笔记-----lamp架构之nginx源码编译

安装目录下清空缓存

 make clean

Linux实战笔记-----lamp架构之nginx源码编译
修改相关配置使其不显示版本

vim ~/nginx-1.20.1/src/core/nginx.h	

Linux实战笔记-----lamp架构之nginx源码编译
查看

curl -I localhost

Linux实战笔记-----lamp架构之nginx源码编译

查看修改后运行的nginx大小

du -h /usr/local/nginx/sbin/nginx	

Linux实战笔记-----lamp架构之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

Linux实战笔记-----lamp架构之nginx源码编译

二、修改进程的属主

增加一个nginx用户

useradd -M  -d /usr/loacl/nginx -s /sbin/nologin nginx

Linux实战笔记-----lamp架构之nginx源码编译

修改nginx安装目录的nginx.conf

vim /usr/local/nginx/conf/nginx.conf

Linux实战笔记-----lamp架构之nginx源码编译
查看

ps ax | grep nginx

Linux实战笔记-----lamp架构之nginx源码编译

三、并发优化

修改配置文件

vim /usr/local/nginx/conf/nginx.conf

修改工作进程数为自动,模块会自动检测

Linux实战笔记-----lamp架构之nginx源码编译
添加控制多核cpu的线程模块worker_cpu_affinity

Linux实战笔记-----lamp架构之nginx源码编译
查看内核支持的最大文件打开数

sysctl -a |grep file

Linux实战笔记-----lamp架构之nginx源码编译
查看系统支持的最大文件打开数

ulimit -a

Linux实战笔记-----lamp架构之nginx源码编译
修改进程能并发处理的最大连接数

最大连接数按优先级排序

内核支持最大文件打开数 > 系统支持最大文件打开数 > Worker支持最大文件打开数

Linux实战笔记-----lamp架构之nginx源码编译

修改系统的最大文件打开数

vim /etc/security/limits.conf

Linux实战笔记-----lamp架构之nginx源码编译

四、nginx平滑升级

准备nginx-1.21.1的安装包,解压

tar zxf nginx-1.21.1.tar.gz
cd nginx-1.21.1

修改相关配置,瘦身nginx

vim auto/cc/gcc

Linux实战笔记-----lamp架构之nginx源码编译
配置安装

./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

Linux实战笔记-----lamp架构之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

Linux实战笔记-----lamp架构之nginx源码编译

Linux实战笔记-----lamp架构之nginx源码编译
刷新服务,加入地址解析
Linux实战笔记-----lamp架构之nginx源码编译
测试访问

for i in {1..10}; do curl www.westos.org; done

Linux实战笔记-----lamp架构之nginx源码编译

装修改权重,再次测试,发现172.25.34.2的权重为2,有三分之二的几率被访问
Linux实战笔记-----lamp架构之nginx源码编译
测试
Linux实战笔记-----lamp架构之nginx源码编译

加入backup,只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
Linux实战笔记-----lamp架构之nginx源码编译
使用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 说明插件安装完成
Linux实战笔记-----lamp架构之nginx源码编译
新的nginx覆盖旧的nginx,重启nginx

cp -f objs/nginx /usr/local/nginx/sbin/nginx

浏览器访问server1
Linux实战笔记-----lamp架构之nginx源码编译
在浏览器中删掉cookie,重新访问
Linux实战笔记-----lamp架构之nginx源码编译

上一篇:Linux安装Nginx


下一篇:rabbitmq篇---清空消息队列的历史数据