Nginx,轻量级Web服务器,并发处理百万级别的TCP连接,运行稳定,热部署(运行时升级),高度模块化设计,自由许可证,高并发。
用到epoll高并发支持技术,高性能、高扩展性、高可靠性(高稳定性)。
用到许多编程技术,内存池、进程池、事件驱动等。
uname -a
sudo apt-get install libpcre3-dev
sudo apt-get install libz-dev
sudo apt-get install libssl-dev
mkdir /home/kuangxiang/nginxsourcecode
cd /home/kuangxiang/nginxsourcecode
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -xzvf nginx-1.16.1.tar.gz
cc,检查编译器的脚本;
lib,检查依赖库的脚本;
os,检查操作系统类型的脚本;
types,检查平台类型的脚本;
CHANGES文件,修复bug和新增加功能说明。
conf目录,默认配置文件。
configure脚本文件,编译前执行,用于生成一些中间文件。
contrib目录,脚本和工具(vim高亮工具等)。
#色彩单一(蓝白相间)
vim /home/kuangxiang/nginxsourcecode/nginx-1.16.1/conf/nginx.conf
cp -r /home/kuangxiang/nginxsourcecode/nginx-1.16.1/contrib/vim ~/.vim
cd ~
pwd
#色彩丰富
vim /home/kuangxiang/nginxsourcecode/nginx-1.16.1/conf/nginx.conf
html目录,欢迎界面(index.html)和错误界面(50x.html)相关的html文件。
man目录,帮助文件目录
cd /home/kuangxiang/nginxsourcecode/nginx-1.16.1/man
man ./nginx.8
执行configure脚本目的:识别操作系统,根据操作系统类型进行相应的优化工作以提高性能;生成一些必要的中间文件;生成一些必要的C源码文件、Makefile文件(编译规则文件,make用到)。
cd /home/kuangxiang/nginxsourcecode/nginx-1.16.1/
./configure --help
--prefix,最终安装根目录,默认/usr/local/nginx/
--sbin-path,可执行文件目录和文件名,默认sbin/nginx,基于--prefix根目录
--conf-path,配置文件目录和文件名,默认conf/nginx,基于--prefix根目录
--with模块,默认不编译
--without模块,默认编译
./configure
ls -la
cd objs
ls -la
cat ngx_modules.c
执行后生成objs目录和Makefile文件
编译
cd /home/kuangxiang/nginxsourcecode/nginx-1.16.1/
make
安装,默认/usr/local/nginx/目录
sudo make install
cd /usr/local/nginx/
ls -la
ps -ef|grep nginx
ps,查看进程
e,显示所有进程
f,全格式显示
grep,查找命令
启动(执行)
cd /usr/local/nginx/sbin
sudo ./nginx
测试
ps -ef|grep nginx
http://192.168.74.148
nginx启动后,产生master进程和worker进程,worker进程的父进程是master进程。
ps -ef|grep nginx
1个master进程+多个worker进程。
master进程,专门管理和监控worker进程。
worker进程做主要工作,接收用户连接请求,实现主要的业务逻辑。
master和worker间通过信号机制、共享内存机制等通信。
这种体系架构(1个master进程+多个worker进程)的稳定性和灵活性体现在,worker进程出现错误意外终止时,master会快速fork新的worker。
查看processor
grep -c processor /proc/cpuinfo
虚拟机可以设置ubuntu内核数。
/usr/local/nginx/conf/nginx.conf
中worker_process
设置worker进程数量。
sudo chmod 777 /usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
#worker_process 4
cd /usr/local/nginx/sbin
sudo ./nginx
ps -ef | grep nginx
不需要中断与用户连接的情况下,能够重新配置、自动升级。
vim /usr/local/nginx/conf/nginx.conf
#不中断用户服务情况下使配置文件生效
cd /usr/local/nginx/sbin
sudo ./nginx -s reload
所有旧的worker退出,产生新的worker。
kill终止旧worker进程,master会自动生成新worker进程。
不停止Nginx对外服务的情况下热升级(升级Nginx这个可执行文件)。
sudo ./nginx -s stop
简单粗暴的立即关闭(用户访问可能因此而中断,会卡住几秒或者收到错误信息)
sudo ./nginx -s quit
优雅(正常)的关闭,不接受新连接,为当前已经连入的用户服务完毕后再退出。
Nginx多进程模型,若worker进程执行出错而崩溃(挂掉),不会影响master进程和其他worker进程,且master监控会重新启动新的worker进程。
为提高Nginx运行效率,可将worker进程和具体CPU(Processor)绑定,解决CPU缓存命中率问题。