概念
web服务器
基于事件驱动的架构,并发处理百万级别TCP连接
高度模块化设计和自由的许可证,扩展第三方模块层出不穷,极佳稳定性
优点
更快
单次请求、高峰请求,都得到更快的响应
高扩展性
低耦合的模块设计,造就庞大的第三方模块;
模块嵌入二进制文件中执行,第三方模块极具优秀性能。
高可靠性
核心框架代码的优秀设计,模块设计的简单性,官方模块非常稳定。
低内存消耗
1万非活跃连接,仅消耗2.5MB内存
尽量使内存消耗更少
单机支持10万以上的并发连接
峰值期支持10万以上并发请求的server
热部署
管理进程和工作进程分离设计,不间断服务,升级nginx的可执行文件、更新配置和更换日志文件
最自由的BSD许可协议
免费使用、直接使用源码和修改源码,并发布
准备
linux系统
2.6以上版本
内核参数优化:
修改/etc/sysctl.conf文件
file-max:进程最大句柄数
tcp_tw_reuse:1:允许将time-wait的socket,重新用于新的TCP连接
tcp_keepalive_time:启用keepalive时,TCP发送keepalive消息的频度。
tcp_fin_timeout:主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间
tcp_max_tw_buckets:TIME_WAIT套接字数量最大值
tcp_max_syn_backlog:三次握手阶段,接收SYN请求队列的最大长度
ip_local_port_range:UDP和TCP连接在本地端口的取值范围
ip.ipv4.tcp_rmem:TCP接收缓存的最小值、默认值、最大值
ip.ipv4.tcp_wmem:TCP发送缓存的最小值、默认值、最大值
netdev_max_backlog:网卡接收数据包速度大于内核处理速度,保存数据包队列的最大值
rmem_default:内核套接字接收缓存区默认的大小
wmem_default:内核套接字发送缓存区默认的大小
rmem_max:内核套接字接收缓存区最大大小
wmem_max:内核套接字发送缓存区最大大小
必备软件
GCC编译器:编译c程序,nginx执行程序
命令:
yum install -y gcc
G++编译器:编译c++程序,用于nginx http模块
命令:
yum install -y gcc-c++
PCRE库:函数库,支持正则表达式
命令:
yum install -y pcre pcre-devel
zlib库:对HTTP包的内容做gzip格式压缩
命令:
yum install -y zlib zlib-devel
OpenSSL库:SSL协议上传输HTTP,使用MD5、SHA1等散列函数
命令:
yum install -y openssl openssl-devel
磁盘目录
源代码存放目录
nginx源码文件、第三方或自己编写模块源码文件
编译中间文件目录
执行configure命令后,产生的原文件及目录;
执行make命令后,生成目标文件和二进制文件;
默认nginx源码目录的obj目录
部署目录
运行需要的二进制文件、配置文件
日志文件目录
nginx底层DEBUG日志文件增长快,需要预先分配大磁盘空间目录
编译与安装
./configure
编译准备:
操作系统内核与已安装软件、
参数解析、
中间目录生成、
生成c源码文件、Makefile文件等
make
编译nginx工程、
生成目标文件
生成最终二进制文件
make install
部署nginx到指定目录
目录生成
复制二进制文件、配置文件
配置(./configure)
命令参数
路径
在编译、运行nginx时,路径相关参数
编译
编译nginx时,编译相关参数
依赖软件
nginx依赖常用软件支持参数
模块
nginx使用的模块相关参数
分类:
事件模块
编译进入nginx的HTTP模块
不编译进入nginx的HTTP模块
邮件代理服务器相关的mail模块
其它模块
其它
执行流程
处理命令参数
脚本初始化,产生文件
分析nginx源码结构
生成目标文件目录
建立必要编译文件
写入命令行的配置参数
判断DEBUG标志
检查操作系统参数是否支持后续编译
输出OS名称、版本
检查设置编译器
定义特定操作系统相关方法,并检查环境是否支持
检查连接期间,第三方静态库、动态库、目标文件是否存在
处理安装后nginx、conf文件、二进制文件、pid、lock文件路径
创建编译时,使用objs/Makefile文件
加入objs/Makefile文件,需要第三方静态库、动态库、目标文件
加入objs/Makefile文件的install功能
加入宏
显示配置执行结果
生成文件
执行./configure,生成objs目录
结构:
src:编译产生的目标文件
Makefile:编译、安装nginx工程的参数设置
autoconf.err:保存执行./configure结果
ngx_auto_header.h\ngx_auto_header.h:保存宏
ngx_modules.c:定义ngx_modules数组,指明模块在nginx处理优先级,最前最优;HTPP除外
命令
启动
默认
/usr/local/nginx/sbin/nginx
指定配置文件
/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
指定安装目录
/usr/local/nginx/sbin/nginx -p /usr/local/nginx/
指定全局配置项
/usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;"
注意:以 -g启动的nginx,执行其它命令时,需要带-g参数
测试配置
检查测试信息是否有误
/usr/local/nginx/sbin/nginx -t
不输出信息
/usr/local/nginx/sbin/nginx -t -q
显示版本信息
/usr/local/nginx/sbin/nginx -v
显示编译阶段参数
/usr/local/nginx/sbin/nginx -V
停止服务
快速
/usr/local/nginx/sbin/nginx -s stop
优雅
/usr/local/nginx/sbin/nginx -s quit
运行中重读配置并生效
/usr/local/nginx/sbin/nginx -s reload
日志回滚
/usr/local/nginx/sbin/nginx -s reopen
平滑升级
通知旧版本准备升级
kill -s SIGUSR2 <nginx的pid>
启动新版本
优雅关闭旧版本
显示帮助
/usr/local/nginx/sbin/nginx -h
/usr/local/nginx/sbin/nginx -?