Nginx
文章目录
一、选择哪个版本的Nginx
开源版:http:/nginx.org/
商业版:https:/www.nginx.com/
淘宝版:https:/tengine.taobao.org/
开源版OpenResty:https:/openresty.org/
商业版OpenResty:https:/openresty.com.cn/
一般情况下,使用开源版的就可以。
二、编译Nginx
为了将第三方模块集成进来,必须采用编译的方式。
2.1 下载,解压
下载:
wget http:/nginx.org/download/nginx-1.18.0.tar.gz
解压压缩包:
tar -zxvf nginx-1.18.0.tar.gz
2.2 目录分析
-
auto
目录cc
子目录,编译用的;os
子目录,对操作系统的判断; -
CHANGES 文件
该版本中的变化
-
configure 文件
用于生成中间文件,编译前的必备动作。
-
man
是一个帮助文件
-
src
ngix 的源代码
2.3 查看nginx支持哪些参数
./configure --help | more
第一类参数:Nginx在执行中会去找哪些辅助的文件;
第二类参数:确定使用哪些模块,和不使用哪些模块
前缀通常是with和without
第三类参数:指定nginx编译过程中,使用的特殊参数;
2.4 编译nginx
./configure --prefix=/Users/dev/servers/nginx
macbook 下需要先:
brew install pcre
编译成功后,所有nginx的编译特性,以及nginx的运行时的目录都会列到下方
nginx path prefix: "/Users/dev/servers/nginx"
nginx binary file: "/Users/dev/servers/nginx/sbin/nginx"
nginx modules path: "/Users/dev/servers/nginx/modules"
nginx configuration prefix: "/Users/dev/servers/nginx/conf"
nginx configuration file: "/Users/dev/servers/nginx/conf/nginx.conf"
nginx pid file: "/Users/dev/servers/nginx/logs/nginx.pid"
nginx error log file: "/Users/dev/servers/nginx/logs/error.log"
nginx http access log file: "/Users//dev/servers/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
编译完成之后,会生成中间文件,放到objs
文件夹下:
该文件夹下的ngx_modules.c
决定了编译的时候哪些模块会被编译进nginx
2.5 执行make
编译
make
编译成功后,生成大量的中间文件,及运行时的二进制文件。
C语言编译生成的所有中间文件,都会放到src目录。
2.6 首次安装,执行make intall
安装完成之后,去--prefix
参数执行的目录下,可以看到:一些目录
其中nginx的二进制文件就在sbin
目录下,决定nginx功能的在conf
目录下
三、nginx的配置语法
-
配置是由指令和指令块构成;
指令可以有名字,也可以没有名字
-
每条指令是以
;
分号结尾,指令与参数间以空格符号分割; -
指令块以
{}
将多条指令组织在一起; -
include语句允许组合多个配置文件以提升可维护性;
-
使用
#
符号添加注释,提高可读性; -
使用
$
符号使用变量; -
部分指令的参数是支持正则表达式的;
-
配置参数的时间单位:
ms
:millisecondss
:secondsm
:minutesh
:hoursd
:daysw
:weeksM
:months,30daysy
:years,365days -
配置参数——空间的单位
默认为
bytes
;k/K
kilobytes;m/M
megabytes;g/G
gigabytes -
http的配置指令块
-
http
-
server
对应一个或一组域名
-
upstream
标示上游服务。当需要与tomcat、企业内网等通信时,定义upstream
-
location
一个url表达式
-
四、nginx命令行
-
格式:
nginx [指令] [指令参数]
,例如:nginx -s reload
-
帮助:
-?
或-h
-
使用指定的配置文件:
-c
默认会到编译ngix时,设置的
-configure
上寻找配置文件。 -
指定配置指令:
-g
覆盖config 中的指令
-
指定运行目录:
-p
-
发送信号:
-s
-- 立即停止服务 nginx -s stop -- 优雅地停止服务 nginx -s quit -- 重载配置文件 nginx -s reload -- 重新开始记录日志文件: nginx -s reopen
-
测试配置文件是否有语法错误:
-t
或-T
-
打印nginx的版本信息和编译信息:
-v
或-V
五、演示
进入nginx的目录
cd /dev/servers/nginx/sbin
5.1 启动nginx
./nginx
5.1 重启配置文件
./nginx -s reload
5.2 查看nging的进程
ps -ef | grep nginx
501 4523 1 0 6:46上午 ?? 0:00.00 nginx: master process ./nginx
501 4538 4523 0 6:46上午 ?? 0:00.00 nginx: worker process
升级nginx,进行热部署
(1) 备份旧的nginx
(2)将新编译好的nginx配置文件拷贝进来
(3) 给正在运行的master发送一个信息,告诉它即将开始热部署
kill -USR2 4523
此时通过ps
命令可以看到两个master进程(新老master同时存在)
(4) 给老的maste发送命令,让其优雅的停止老的worker进程
kill -WINCH 4523
此时老的worker进程已经停止,但老的master不会自动停止,留在这里允许我么做版本回退(执行reload
命令)。
日志切割
(1)先备份老的日志;
(2)执行reopen
命令生成信息的日值文件;
./nginx -s reopen
或者发送USR1
信号,和执行reopen
命令的效果是一样的。