96SEO 2026-02-23 12:04 27
DIR解释指定运行nginx的master主进程的pid文件存放路径示例pid

number解释指定worker子进程可以打开的最大文件句柄数示例
size解释指定worker子进程异常终止后的core文件用于记录分析问题示例worker
cpumask2…解释将每个worker子进程与我们的CPU物理核心绑定示例
4个物理核心4个worker子进程worker_cpu_affinity
2个物理核心4个子进程备注将每个worker子进程与特定CPU物理核心绑定优势在于避免同一个worker子进程在不同的CPU核心上切换缓存失效降低性能其并不能真正的避免进程切换
number解释指定worker子进程的nice值以调整运行nginx的优先级通常设定为负值以优先调用
备注Linux默认进程的优先级值是120值越小越优先nice设定范围为-20到19
解释指定worker子进程优雅退出时的超时时间示例worker_shutdown_timeout
解释worker子进程内部使用的计时器精度调整时间间隔越大系统调用越少有利于性
能提升反之系统调用越多性能下降示例worker_resolution
解释设定nginx的运行方式前台还是后台前台用户调试后台用于生产示例daemon
子进程能够打开的最大文件句柄数linux上可以通过ulimit命令来看当前用户可以打开的一个文件句柄数linux的一个哲学就是一切皆文件对于每一个进程来说它能够打开的文件句柄数也是有限制的这是linux自身所固有的一个特性对于
进程来说尤其是高并发的系统的而言我们在这儿必须要对这样一个参数进行一个设置默认配置下它跟我们系统的参数应该是一致的比如说
对于每一个用户他所打开的文件具柄数也是不一样的对于work子进程来说在上面比如说我们指定
默认打开的文件句柄数上面的设置意味着每一个worker子进程能够打开的最大文件句柄数就是
20480其实对于任何一个用户请求发送过来以后真正处理这些用户请求的都是我们的这个worker子进程对于worker
子进程来说每一个连接都会发起一个TCP连接TCP连接之后它会发送很多这样一些数据包文。
对于每一个连接来说至少都需要一个套接字来维持这样一个连接其实一个套接字可以理解成它就是一个文件句柄。
所以说我们的Nginx想要承载更大的并发量的话肯定把这个参数调高如果
自身来说的话它并不能够承受这样的并发量我们通常单台服务器来说对于
65535这是我们linux的自身的一个最大限制也就是说我们整个操作系统来说最大可以打开的文件句柄数也就是
20480可能写五万甚至十万的都有这意味着超额设置最起码来说对于高并发系统不会达到我们的瓶颈虽然我们达不到但是它会充分使用
用来记录我们的woker子进程因为某一些原因异常终止后或重启的日志这就是说我们如果设定了这样一个参数之后我们的worker
文件中便于开发人员或者是运维人员在发现这样一个情况之后可以查找具体的原因查到是哪些原因导致了我们的worker
用户对真正情况下来说我们都知道我们的master进程是root用户运行的但是真正处理用户请求的是
这个我们可以有两种用法第一种可以直接指定个数直接只写一个number比如说直接指定4那第二种情况下在Nginx的高版本中都有一个auto的属性也就是,
会自动启动跟我们当前物理CPU核心的个数一致的一个子进程把它设定auto之后我们就不需要去管了只有Nginx服务自动去探测当前服务器上CPU的物理核心个数从而它将它设定为和物理核心个数一致的子进程
也就是将我们的每一个worker子进程程与我们的CPU物理核心进行一个绑定来看下图对于我们当前的nginx进程来说呢它会启动一个
这个管理进程只是用来维护我们的work子进程更新配置文件并将新的配置文件信息传递给我们的work子进程但是它并不会真正的处理用户请求真正处理用户请求的是下面主进程复制出来的几个work子进程那假如说现在当前有4个work子进程不管是什么进程在CPU上都不可能是永远运行的也就是说这个CPU不可能永远归你一个人,
每一个进程需要去CPU上申请CPU资源运行的时候它通常会根据自己当前的一个优先级在CPU上申请一个时间片时间线就是一个时间,
申请了这样一个时间片之后它就开始等待CPU的调度在某一时刻CPU可能说OK你现在可以运行了这个时候我们的worker子进程就会被CPU所调度上去从而使用当前CPU的资源进行一个计算到了一定的时间片完了之后我们当前这个进程必须从当前的CPU上给退下来或者是进入睡眠状态或者是去处理一些等待一些其他的事情总之这个CPU他是不能再用了因为这个CPU可能需要被其他的进程进行调度使用现在就有一个问题比如说我们的
子进程对于多核心的服务器架构来说比如说我们现在有4个物理核心和我们的worker子进程数量一样的物理核心比如说当前某一个时刻我们这个worker
被A所调度了A在1号CPU上运行了一段时间之后由于时间片到了它必须要从1号CPU上切换下来一号CPU就被其他的一些进程调度了可能不是我们的
号worker子进程被其他linux的进程抢走去运行其他资源一段时间之后我们的worker子进程了又申请到时间片了又要去在CPU上运行了这个时候可能不是1号CPU去调度A这个worker子进程了可能这个时候A申请到的是第三颗CPU这个时候它再去第三个CPU上进行运行运行一段时间之后它再下来这样来回的在每一个CPU之间切换这样有一个最大的问题频繁的这些从CPU上运行又下来调度给其他进程这个进程切换的过程中注意进程切换在很多地方也称为上下文切换对于这样一些进程切换来说都是有性能开销的我们应该在一种理想的情景下尽可能的减少这些进程切换虽然进程切换不可避免但是我们如果能够尽可能的降低这些技能切换并充分利用单颗CPU的缓存就可以大幅提高性能现在我们需要将1号CPU和
3号和C4号和D绑定在一块绑定完之后比如说A这个worker子进程就永远只能被一号CPU所调度这样的好处是A不再会与2,3,4号CPU绑定只会等待1号的调度我们每一个worker子进程所使用的CPU缓存来说它永远是有效的假如我们不把worker子进程和CPU核心进行绑定的话不同CPU的调度缓存会失效所以把
子进程和CPU绑定一个最大的好处就是尽可能的是减少CPU缓存的失效性能降低但是它并不能避免进程切换因为进程切换是CPU的一个特性对于每一个进程来说都不可能完全的去拥有CPU尤其是对现在的一个linux操作系统来说它是一个多任务的操作系统这样的绑定也是充分利用多核心的一个特性我们看它的一个绑定指令的一个写法上面示例中的
是用掩码形式来标记cpu核心worker_cpu_affinity
4个物理核心和4个worker子进程每个物理核心与一个子进程绑定
这个参数主要是用来指定我们worker子进程中的一个nice值以调整运行Nginx优先级通常设定为负值以优先调用Nginx,
linux上可以通过调整nice值从而去改变一个进程运行的优先级从而尽可能的被调度进程优先级越高它就尽可能的被CPU所调度linux本身默认的进程优先级是
这样就保证我们的每一个worker子进程的优先级都是比较高的从而尽可能的被CPU所调度使用从而保证我们的Nginx处理的高性能这个在实际的生产环境中通常把这个设定的一个负值就行了这个需要根据你自身这个操作系统上很多的应用程序来判断当然Nginx服务器一般只跑Nginx这样能够保证Nginx承载很高并发量我们不会选择在Nginx服务器上跑其他的应用程序
的热部署中在更新了配置文件包括我们的程序文件信息之后我们需要给worker子进程发送一个什么指令,
指令不会主动的去关闭客户端所发送过来的连接它会优先将客户端的连接给请求处理完之后去等待客户端关闭连接那这样就存在一种情形比如说我们的客户端因为一些情况的异常了他这个客户端发起TCP请求之后它与我们Nginx服务器建立了一个TCP连接建立完TCP连接之后需要发送对应的HTTP请求需要将HTTP的header信息发送到服务器服务器收到之后再响应某些情况下它建立一个连接之后就是不发送请求或者是发送了一个请求之后得到我们服务器的回应之后它就是不返回确认的数据包为了应对这样一种情形防止Nginx服务器被很多恶意程序所攻击比如说很多恶意程序的故意发送这样一个数据报文它就是不跟你确认不让你关闭如果永远不关闭的话这个连接就相当于是永远不会释放了这会严重的影响我们的Nginx性能这个时候,
我在给你发送完正常的回应之后我会等待这个强制性的时间比如说五秒内如果五秒之后不管你有没有回应或主动断开我会我强制你断开用以防止攻击
子进程内部使用的计算器精度比如设成5毫秒比如说我们的Nginx自身运行的过程中它会向我们的内核态发起很多系统调用比如说它要去获取时间计时器上面这个参数既然定义了5秒超时时间肯定要有一个计时器这个计时器通过获取内核态的一个系统时间对所有的用户进程需要向内核态发起系统调用的时候这个对性能来说是有很大的影响的每一次用户态向内核态的切换都会降低性能所以需要把这个时间间隔尽可能设置的小一点当然如果说你这个应用本身对实间精度要求特别高的话需要去把这个值设的尽可能大一般在情况下会把这个值设置小一点参考如下
假设右边这张图就是我们的Nginx服务器它启动了4个worker子进程用来响应客户端发送过来的用户请求Nginx
自身是运行的用户态的我们的应用程序是七层的它肯定是运行在我们的用户态的我们都知道操作系统是有内核态的内核态处理什么比如说TCP/IP协议中的数据包都是由内核态来做处理的再比如说我们需要磁盘IO了在操作系统获取系统时间等等这样一些系统调用包括我们去获取磁盘上的文件信息我们打开某一个文件它的一个应用程序需要向我们内核态的一个read函数发起一个系统调用从而由我们的内核态去和我们磁盘上的文件打交道把内容再返回给我们用户态进程所以说对于这样一个用户请求比如说我们现在有一个用户他发送一个TCP连接打到我们的网卡上网卡收到之后把这个TCP连接拆包给TCP/IP协议TCIP协议能够解开这样一个数据包如果网卡把二层的数据包给拆掉之后它发现一些三层的信息比如说是否是当前的IP如果是当前的IP再继续处理如果不是当前的IPTCP/IP协议栈会直接将这个数据包给丢掉如果发现这个三层的这个IP数据包是自己的IP的话它会继续拆包到四层再看这个端口是谁发现是向80端口发起的服务请求。
这个时候我们的内核态会知道
80端口就是监听在用户态的某一个应用程序所提供的服务比如说我们的Nginx服务,
这时候TCP/IP协议栈会将这样一个用户请求的这个数据包继续扔给我们这个用户态空间的worker子进程由worker子进程具体去处理假如说我们需要频繁的去获取系统的时间或者是跟磁盘打交道等等当一些用户态应用程序做不了一些事情的时候比如计时器获取系统时间就要发起系统调用这时候就会和内核态来打交道这种系统调用很耗费性能如果说你的时间精度要求高的话比如说间隔可能是十毫秒也就是十毫秒不停的需要有用户态切换到内核态并且从内核态的切换到用户态这样会极大影响性能所以
这个字段为了尽可能减少应用程序和内核态之间的频繁切换来节约性能
就代表Nginx运行方式是在后台也就是默认的方式如果说在一些调试情况下在开发的过程中可能会遇到很多很多的问题。
需要打开调试模式的时候我们可以将这个这样一个参数设定为
off这个时候它会运行在前台将很多的错误信息给你输出当然这个参数需要配合其他很多的一些调试参数来使用啊其实这个参数我们用的也很少它能够供我们来调试debug使用
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback