第2章 Nginx的配置

Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能。使用这些模块时,仅仅需要增加、修改一些配置项即可。因此,本章的目的是熟悉Nginx的配置文件,包括配置文件的语法格式、运行所有Nginx服务必须具备的基础配置以及使用HTTP核心模块配置静态Web服务器的方法,最后还会介绍反向代理服务器。

通过本章的学习,读者可以:熟练地配置一个静态Web服务器;对影响Web服务器性能的各个配置项有深入的理解;对配置语法有全面的了解。通过互联网或其他途径得到任意模块的配置说明,然后可通过修改nginx.conf文件来使用这些模块的功能。

2.1 运行中的Nginx进程间的关系

在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。每一个worker进程都是繁忙的,它们在真正地提供互联网服务,master进程则很“清闲”,只负责监控管理worker进程。worker进程之间通过共享内存、原子操作等一些进程间通信机制来实现负载均衡等功能(第9章将会介绍负载均衡机制,第14章将会介绍负载均衡锁的实现)。

部署后Nginx进程间的关系如图2-1所示。

Nginx是支持单进程(master进程)提供服务的,那么为什么产品环境下要按照master-worker方式配置同时启动多个进程呢?这样做的好处主要有以下两点:

由于master进程不会对用户请求提供服务,只用于管理真正提供服务的worker进程,所以master进程可以是唯一的,它仅专注于自己的纯管理工作,为管理员提供命令行服务,包括诸如启动服务、停止服务、重载配置文件、平滑升级程序等。master进程需要拥有较大的权限,例如,通常会利用root用户启动master进程。worker进程的权限要小于或等于master进程,这样master进程才可以完全地管理worker进程。当任意一个worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务。

多个worker进程处理互联网请求不但可以提高服务的健壮性(一个worker进程出错后,其他worker进程仍然可以正常提供服务),最重要的是,这样可以充分利用现在常见的SMP多核架构,从而实现微观上真正的多核并发处理。因此,用一个进程(master进程)来处理互联网请求肯定是不合适的。另外,为什么要把worker进程数量设置得与CPU核心数量一致呢?这正是Nginx与Apache服务器的不同之处。在Apache上每个进程在一个时刻只处理一个请求,因此,如果希望Web服务器拥有并发处理的请求数更多,就要把Apache的进程或线程数设置得更多,通常会达到一台服务器拥有几百个工作进程,这样大量的进程间切换将带来无谓的系统资源消耗。而Nginx则不然,一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当Nginx上的进程数与CPU核心数相等时(最好每一个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。

举例来说,如果产品中的服务器CPU核心数为8,那么就需要配置8个worker进程(见图2-2)。

如果对路径部分都使用默认配置,那么Nginx运行目录为/usr/local/nginx,其目录结构如下。

  1. |---sbin
  2. |    |---nginx
  3. |---conf
  4. |    |---koi-win
  5. |    |---koi-utf
  6. |    |---win-utf
  7. |    |---mime.types
  8. |    |---mime.types.default
  9. |    |---fastcgi_params
  10. |    |---fastcgi_params.default
  11. |    |---fastcgi.conf
  12. |    |---fastcgi.conf.default
  13. |    |---uwsgi_params
  14. |    |---uwsgi_params.default
  15. |    |---scgi_params
  16. |    |---scgi_params.default
  17. |    |---nginx.conf
  18. |    |---nginx.conf.default
  19. |---logs
  20. |    |---error.log
  21. |    |---access.log
  22. |    |---nginx.pid
  23. |---html
  24. |    |---50x.html
  25. |    |---index.html
  26. |---client_body_temp
  27. |---proxy_temp
  28. |---fastcgi_temp
  29. |---uwsgi_temp
  30. |---scgi_temp

运行中的Nginx进程间的关系相关推荐

  1. Linux命令之pstree - 以树状图显示进程间的关系

    2019独角兽企业重金招聘Python工程师标准>>> pstree命令以树状图显示进程间的关系(display a tree of processes).ps命令可以显示当前正在运 ...

  2. Linux 服务器程序规范、服务器日志、用户、进程间的关系

    文章目录 服务器程序规范 日志 rsyslogd 守护进程 syslog函数 openlog函数 setlogmask函数 closelog函数 用户 进程间的关系 进程组 会话 系统资源限制 改变工 ...

  3. [Linux] Linux命令之pstree - 以树状图显示进程间的关系

    转载自: http://codingstandards.iteye.com/blog/842156 pstree命令以树状图显示进程间的关系(display a tree of processes). ...

  4. Nginx进程间的通信机制

    概述 linux进程间通讯方式 在linux系统中进程之间的通讯方式有套接字.共享内存.消息队列.管道.信号 Nginx进程间通讯方式 Nginx选择其中的套接字.共享内存.信号作为同步master进 ...

  5. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 使用 IDA 分析要修改的内存特征 | 根据内存特征搜索修改点 | 修改进程内存 )

    文章目录 一.使用 IDA 分析要修改的内存特征 二.根据内存特征搜索修改点 三.修改进程内存 一.使用 IDA 分析要修改的内存特征 在前的博客 [Android 逆向]逆向修改游戏应用 ( 分析应 ...

  6. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )

    文章目录 一.Android 命令行中获取要调试的应用进程的 PID 二.进程注入调试进程内存的 so 库 一.Android 命令行中获取要调试的应用进程的 PID 前置博客 [Android 逆向 ...

  7. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system )

    文章目录 一.运行环境搭建 Android 模拟器安装 二.拷贝 Android 平台可执行文件和动态库到 /data/system 目录下 一.运行环境搭建 Android 模拟器安装 使用低版本的 ...

  8. Nginx学习之九-负载均衡(客户端请求与Nginx进程间负载均衡)

    本文介绍的负载均衡是针对的客户端请求在多个Nginx进程之间的均衡.注意与客户端请求在多个后端服务器之间的均衡相区别. 负载均衡问题的产生 在nginx中,建立连接的时候,会设计负载均衡问题.在多个子 ...

  9. Nginx进程间通讯方式

    Nginx Socket Channel 父子进程通讯 socketpair 该方法用于创建父子进程间使用的套接字入参: type 表示套接字上使用TCP还是UDP sv[2] 表示一个含有两个元素的 ...

最新文章

  1. 源码资本张宏江:只有算法和技术,那你一定挣不到钱
  2. HDU 5289 Assignment(单调队列)
  3. 基于R语言构建的电影评分预测模型
  4. Java蓝牙电话_Android mediaPlayer和蓝牙汽车/耳机电话
  5. 翻译自 RedHat 文章:What is middleware? (什么是中间件?)
  6. Java 蓝桥杯 芯片测试
  7. k8s部署jar包_K8S部署SpringBoot应用_都超的博客-CSDN博客_k8s springboot
  8. linux获取打开串口失败的原因,linux – 从串口读取失败
  9. Ubuntu下替换软件列表
  10. JSP编程技术4-登录与注销(静态)
  11. 2020-09-26-舵机+两相4线步进电机
  12. xshell评估过期解决办法
  13. 服务器的mdf文件怎么打开,mdf文件,教您mdf文件怎么打开
  14. 查询linux下的业务端口,Linux系统查询显示端口信息用什么命令
  15. JavaScript 详细笔记(狂神说学习笔记)
  16. FPGA串口收发(四):接收数据并转发,间隔时间发送
  17. rot13初学者和python的实现
  18. 如何更改vmware的网络模式
  19. discuz密码找回:忘记UCENTER创始人密码
  20. python3.7安装keras教程_keras教程-02-tensorflow和keras安装

热门文章

  1. TransactionScope 分布式事务
  2. fatal error LNK1561: 必须定义入口点问题的我是这样解决的
  3. HDU多校1 - 6955 Xor sum(字典树+贪心)
  4. POJ - 2104 K-th Number(主席树)
  5. Hash冲突处理终极版
  6. 抚摸那条船——彭晓东
  7. 【网络编程】之七、select聊天室
  8. 【网络编程】之一、初识WinSocket
  9. C++操作SQLite简明教程
  10. 使用NETSH来绑定ARP