Nginx基本功能
在运行时控制Nginx进程#
理解Nginx处理流量的进程以及如何在运行时控制它们。
这个部分描述了Nginx在运行时启动的进程以及如何控制它们。
Master和Worker进程#
Nginx有一个master进程和一个或多个worker进程,如果缓存是开启的,那么cache loader进程和cache manager进程也会在启动时运行。
master进程的主要工作就是读取和计算配置文件,以及维护worker进程。
worker进程进行实际的请求处理。Nginx依赖OS独立的机制来在worker进程间分发请求。worker进程的数量在nginx.conf
中由worker_processes指令定义,它可以被设置成一个固定的数,也可以配置成由可用CPU内核数量来自动调整。
控制Nginx#
你可以stop
然后restart
Nginx来重新加载你的配置,或者向master进程发送一个信号。你可以通过运行nginx
命令,指定一个-s
参数来发送这一信号。
nginx -s <SIGNAL>
<SIGNAL>
可以是下列中的一个:
quit
- 优雅地关闭(SIGQUIT
信号)reload
- 重新加载配置文件(SIGHUP
信号)reopen
- 重新打开日志文件(SIGUSR1
信号)stop
- 立即关闭信号(或者快速关闭,SIGTERM
信号)
你也可以通过kill
工具来直接发送一个信号到master进程,master进程的进程ID默认情况下写入到nginx.pid
文件中,你可以在/usr/local/nginx/logs
或/var/run
目录下找到它。
更多的高级信号的信息(比如执行一个实时二进制升级(live binary upgrades)),请移步nginx.org网站上的Controlling nginx。
创建Nginx Plus和Nginx配置文件#
理解Nginx或Nginx Plus配置文件中的基本元素,包括指令(directives)和上下文(context)。
Nginx和NginxPlus和其它服务很像的一点是,它们都使用一个特定格式的基于文本的配置文件。默认情况下,这个文件被命名为nginx.conf
。对于Nginx Plus来说,它被放在/etc/nginx
目录下。(对于Nginx Open Source,它们被放置的目录依赖于你安装Nginx时使用的包管理器和操作系统。典型的位置是/usr/local/nginx/conf
,/etc/nginx
或/usr/local/etc/nginx
)。
指令#
配置文件中包含指令和它们的参数。简单指令由一个分号结尾,其它的指令作为将一些相关指令组合到一起的容器,其它的指令被放在花括号中({}
),它们经常被称作块。下面是一些简单指令的示例:
user nobody;
error_log logs/error.log notice;
worker_processes 1;
特定功能的配置文件(Feature-Specific Configuration Files)#
为了使配置文件更加易于维护,我们推荐你将它们分开放置到特定于功能的文件中,并将它们放到/etc/nginx/conf.d
目录下。在主配置文件中通过使用include指令来引用这些特定功能的文件中的内容。
include conf.d/http;
include conf.d/stream;
include conf.d/exchange-enhanced;
上下文(Contexts)#
一些被称作上下文的顶级指令,它们将应用在不同流量类型的指令组合在一起:
被放置在这些上下文之外的指令,我们称它们在main
上下文中。
虚拟服务器#
在每一个流量处理上下文中,你可以包含一个或多个server
块来定义虚拟服务器来控制请求的处理。而在server
上下文中你可以使用的指令取决于当前的流量类型。
对于HTTP流量(http
上下文),每一个server指令控制着对于在特定域名或IP地址下的资源的处理。而server
上下文中的一个或多个location上下文定义者如何处理特定的URI集合。
对于mail和TCP/UDP流量(mail
和stream
上下文),server
指令控制着在特定TCP端口或Unix套接字上到达的流量进程。
一个具有多个上下文的配置示例#
user nobody; # 一个在main上下文中的指令
events {
# 这里可以填写连接处理的配置
}
http {
# 这里可以填写特定于HTTP的配置,它会影响所有的(本上下文中)虚拟Server
server {
# 这里可以填写对于HTTP虚拟服务器1的配置
location /one {
# 这里可以填写用于处理具有由`/one`开始的URI的请求
}
location /two {
# 这里可以填写用于处理具有由`/two`开始的URI的请求
}
}
server {
# 这里可以填写对于HTTP虚拟服务器2的配置
}
}
stream {
# 这里可以填写特定于 TCP/UDP的配置 这会影响所有虚拟server
server {
# TCP虚拟服务器1的配置
}
}
继承性#
通常来说,一个子上下文——被包含在另一个上下文(它的父上下文)中的上下文——会继承在父级中的指令的设置。一些指令可以出现在多种上下文中,在一些特定情况下,你可以通过在子上下文中包含指令来重写从父上下文中继承的设置。这里是一个例子——proxy_set_header
重新加载配置#
如果你想让配置文件的修改产生效果,它必须被重新加载。你可以重启nginx
进程或者发送一个reload
信号来更新配置而不用打断当前正在处理的请求。详见Controlling NGINX Processes at Runtime。
作者:Yudoge
出处:https://www.cnblogs.com/lilpig/p/16480238.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
欢迎按协议规定转载,方便的话,发个站内信给我嗷~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!