优点
- 高并发,高性能
- 可拓展性好
- 高可靠性
- 热部署
- BSD许可证
主要应用场景
静态资源服务
通过本地文件系统提供服务
反向代理服务
强大的性能
缓存
负载均衡
API服务
OpenResty
使用nginx作为web服务器比apache做为web服务器的好处:
apache一个请求对应一个进程,但是nginx一个进程可以处理多个请求。并发性能好,同时具备高并发高性能。
nginx的组成
- nginx二进制可执行文件
由各模块源码编译出的一个文件 - nginx.conf配置文件
控制nginx的行为 - access.log访问日志
记录每一条http请求信息 - error.log错误日志
定位问题
实践使用nginx
- 从官网上下载nginx后,目录中的contrib的可以对vim的代码样式进行渲染,方便对conf文件进行编写
命令:cp -rf contrib/vim/* ~/.vim/ - 在编译前,可以使用configure命令进行查看支持哪些参数
在nginx执行中,它会在哪些目录下加载哪些文件,即在编译时对各种配置文件的位置进行修改或加载模块等
./configure (./configure --help 可以查看参数)
--modules-path=PATH 在编译前设置的模块
--config-path=PATH 修改编译后nginx.conf文件的位置
--prefix 如果使用默认编译,用这个参数即可,所有的文件会按照官方设置好的位置进行设置,这个参数只需要填写nginx的安装目录的路径即可,必须是存在的
使用参数执行后,如果发生错误,如图
,
就按照提示添加参数
完成配置,在nginx中的objs文件夹中,ngx_modules.c文件中,配置了编译时将会添加进当前nginx的模块
开始编译
编译完成后,就生成了最终文件和目标文件,也是放在上面的objs文件夹中,如果是对nginx进行版本升级,这时还不能对它进行安装(make install),还需要把目标文件拷贝到安装目录中,c语言编译生成的中间文件都会放在objs中的src文件夹中。
如果使用动态模块,也会放在这个src文件中
开始安装,首次安装使用make install
安装完成后,在设置好的安装目录/opt/nginx中的conf文件夹中包含了编译前放入的conf中的配置文件。
sbin是ngnix主要的执行命令文件的存放目录。
Nginx配置语法
- 配置文件由指令与指令块构成
- 每条指令以 ; 分号结尾,指令与参数间以空格符号分割
- 指令块以 { }大括号将多条指令组织在一起
- include语句允许组合多个配置文件以提升可维护性
- 使用#添加注释
- 使用$使用变量
- 部分指令的参数支持正则表达式
http指令块中包含server指令块
include是指令名,后面就是参数
同一行中多条语句可以使用 ; 进行分隔
location指令 后面的参数就可以使用正则表达式进行自定义,还有指令中的类型后面的$使得可以通过$1取得git变量等功能
nginx.conf中http配置的指令块
- http:表示里面所有的指令都是通过http模块进行解析
- server:表示一个对应的一个或一组域名
- upstream:表示上游符,当nginx需要与tomcat等企业内网的其他服务交互时定义upstream
- location:表示url表达式
nginx命令行
- 格式:nginx -s reload
- 帮助:-? -h
- 使用指定的配置文件: -c
- 使用支配指令:-g
- 指定运行目录:-p
- 发送信号:-s stop 立即停止|quit 优雅停止|reload 重载配置文件|reopen 重新开始记录日志文件
- 测试配置文件是否有语法错误:-t -T
- 打印nginx的版本信息、编译信息等:-v -V
nginx热部署,平滑升级
在nginx中,对nginx进行重新配置模块或是其他配置,就需要重新部署,这时候可以使用热部署的方法
先在安装目录中的sbin将nginx备份一份。
然后从编译好的nginx中的objs目录的nginx文件复制到安装目录的sbin中
现在需要给正在运行的nginx进程发送一个信号,告知将开始热部署
先对nginx这个进程查看进程号
通过kill -USR2 进程号 这条命令会将旧的命令worker过渡到新的worker,新的请求都会进入新的worker中
通过kill -WINCH 进程号 这条命令可以将所有worker进行关闭,现在旧的版本就不再活跃,而是让新的worker进行接受请求,但是旧的worker不会结束进程,为了可以让新的进程回退到老的进程中,作为版本回退。
nginx日志切割
将日志备份到另一个存储空间
使用mv命令将日志文件放在另一个位置,然后使用nginx -s reopen,就会重新生成一个新的日志文件在原来的位置
可以建立一个bash脚本进行自动化地切割日志