nginx学习记录
基础架构
1.请求流程
优点
- 高并发,高性能
- 可扩展性良好
- 高可靠性
- 热部署
- BSD许可证
–32核64G,可支持千万并发
组成
(1)Nginx二进制可执行文件
(2)Nginx。conf配置文件
(3)access.log访问日志
(4)error.log错误日志
历史版本
第三方模块框架
OpenResty
编译nginx
下载安装nginx
源码目录
目录说明
① auto 用于编译,其中包含了四个主要目录,分别是cc(用于编译)、lib、os(对编译操作系统的判断)、types
② CHANGES: nginx的版本变化
③ CHANGES.ru: 俄罗斯版本
④ conf: 一些示例文件,nginx安装好后为了方便运维去配置,会把conf的示例文件拷贝到安装目录
⑤ configure: 该文件用于生成中间文件,执行编译前的必备动作
⑥ contrib: 提供2个perl脚本和vim的工具,改变配置nginx.conf的vim语法配色1
cp -r contrib/vim/* ~/.vim/
⑦ man: nginx帮助文件
⑧ src: 源代码编译
1
./configure --help | more
如果不需要变动,编译时只需要指定–prefix参数即可,所有的文件会在prefix目录下建相应的文件夹
–with前缀的模块默认不加入编译
–without前缀的模块默认加入编译,执行该命令表示移除编译1
2
3
4
5
6
7
8
9//安装依赖
//解决zlib error依赖错误
sudo apt install zlib1g-dev
//解决openssl error依赖错误
sudo apt install openssl libssl-dev
//解决pcre error依赖错误
sudo apt install libpcre3 libpcre3-dev执行configure,会生成中间文件在objs文件夹下,其中最重要的是ngx_modules.c,它决定了哪些模块将参与编译
1
./configure --prefix = ~/home/app/nginx
接下来是执行make编译,目标文件在objs目录“nginx”,c编译的中间文件在src目录1
make
最后执行安装命令,安装在prefix执行的目录中1
make install
nginx命令行
1 | //使用指定配置文件 -c |
修改配置后,直接nginx -s reload即可,会自动加载新的配置,在这个过程中,会重新启动一个worker进行,并将之前的worker进程优雅的退出
优雅关闭
优雅的关闭只针对http协议层
热部署
- 部署最新版本的nginx,只需替换nginx二进制文件,首先用ps -ef | grep nginx,观察进程的状态。(注意在编译新版本的nginx时,不需要执行make install命令,否则会覆盖之前的配置文件)
- 然后将安装目录下sbin/nginx,修改为nginx.old
1
mv nginx nginx.old
- 然后将其他版本的nginx移到该目录下
1
cp ../openresty/nginx/sbin/nginx ./
- 然后像nginx发送信号(kill -USR2 79637),其会启动新版本nginx进程
1
kill -USR2 79637
- 然后向老的nginx进程发送一个信号(kill -WINCH 79637),让其优雅的关闭work进程
1
kill -WINCH 79637
- 在这之后可以看到老版本的nginx的worker进程已经关闭,还剩下master进程,master进程是为了防止新部署的版本出现问题,可以做版本回退的作用
版本回退
- 首先通过信号,kill -HUP 79637重新拉起旧版本的master进程
1
kill -HUP 79637
- 然后像新版本的nginx,发送kill -WINCH 112586信号使其优雅的关闭worker进程
1
kill -WINCH 112586
- 最后关闭新版本的nginx master进程即可
1
kill -9 112586
日志切割
- 首先到log目录下,将之前日志转移到另一个文件
1
mv access.log pre_access.log
- 然后在nginx目录下,执行reopen命令即可生成新的日志文件
1
sudo nginx -s reopen
Nginx信号
其中master进程会检测worker进程,当worker异常终止时,master进程会接收到一个CHLD信号。然后master进程会重新将worker进程拉起。reload流程
(注意配置worker_shutdown_timeout)
使用Goaccess分析日志
- 使用apt安装goaccess然后执行一下命令即可。-o 分析日志网页的生成路径,其余参数查看官网帮助文档,其中注意在nginx的日志格式变化的情况下,需要修改–log-foramt参数对应的值
1
sudo apt install goaccess
1
goaccess pre_access.log -o ../html/report.html --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED
Nginx模块数据结构
其中ngx_module_t中的type字段定义了nginx模块的类型
共享内存使用模块
参考文章
- 本文标题:nginx学习记录
- 本文作者:lookupman
- 创建时间:2020-10-18 17:23:54
- 本文链接:https://lookupman.cn/2020/10/18/nginx学习记录/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!