连接数 worker_connection:这个值是表示每个 Worker 进程所能建立连接的最大值 。所以,一个 Nginx 能建立的最大连接数,应该是 worker_connections*worker_processes 。当然,这里说的是最大连接数,对于 HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections*worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接 。所以普通的静态访问最大并发数是:worker_connections*worker_processes /2 。而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections*worker_processes/4 。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接 。Nginx 请求处理流程如下图:

文章插图
Nginx 模块开发
由于 Nginx 的模块化特性,所以可以支持模块配置,也可以自定义模块,Nginx 的模块开发,程序员目前还不需要太深入 。
Nginx 模块分类如下图:

文章插图
Nginx配置选项,解压 Nginx 后的配置操作示例:
./configure--prefix=/usr/local/nginx--with-http_stub_status_module--with-pcre--with-http_ssl_module
文章插图
Nginx 面试题
①Nginx 功能,你们项目中用到的 Nginx?
- 反向代理服务器
- 实现负载均衡
- 做静态资源服务器
- 作为 HTTP Server
启动nginx./sbin/nginx停止nginx./sbin/nginx-sstop./sbin/nginx-squit重载配置./sbin/nginx-sreload(平滑重启)servicenginxreload重载指定配置文件./sbin/nginx-c/usr/local/nginx/conf/nginx.conf查看nginx版本./sbin/nginx-v检查配置文件是否正确./sbin/nginx-t显示帮助信息./sbin/nginx-h③Nginx 常用配置?worker_processes4;#工作进程数work_connections65535;#每个进程的并发能力error_log/data/nginx/logs/error.log;#错误日志④Nginx 是如何实现高并发的?Nginx 采用的是多进程(单线程)&多路 IO 复用模型,异步,非阻塞 。
一个主进程 Master,多个工作进程 Worker,每个工作进程可以处理多个请求 ,Master 进程主要负责收集、分发请求 。
每当一个请求过来时,Master 就拉起一个 Worker 进程负责处理这个请求 。同时 Master 进程也负责监控 Woker 的状态,保证高可靠性 。
在 Nginx 中的 Work 进程中,为了应对高并发场景,采取了 Reactor 模型(也就是 I/O 多路复用,NIO) 。
I/O 多路复用模型:在 I/O 多路复用模型中,最重要的系统调用函数就是 Select(其他的还有 epoll 等) 。
该方法能够同时监控多个文件描述符的可读可写情况(每一个网络连接其实都对应一个文件描述符),当其中的某些文件描述符可读或者可写时,Select 方法就会返回可读以及可写的文件描述符个数 。
Nginx Work 进程使用 I/O 多路复用模块同时监听多个 FD(文件描述符),当 Accept、Read、Write 和 Close 事件产生时,操作系统就会回调 FD 绑定的事件处理器 。
这时候 Work 进程再去处理相应事件,而不是阻塞在某个请求连接上等待 。
这样就可以实现一个进程同时处理多个连接 。每一个 Worker 进程通过 I/O 多路复用处理多个连接请求 。
为了减少进程切换(需要系统调用)的性能损耗,一般设置 Worker 进程数量和 CPU 数量一致 。
⑤Nginx 和 Apache 的区别?
轻量级,同样起 Web 服务,比 Apache 占用更少的内存及资源抗并发,Nginx 处理请求是异步非阻塞的,而 Apache 则是阻塞型的 。
在高并发下 Nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单,最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程 。
⑥Nginx 的 Upstream 支持的负载均衡方式?
- 轮询(默认)
- weight:指定权重
- ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
- 第三方:fair、url_hash
- 调整 worker_processes:指 Nginx 要生成的 Worker 数量,最佳实践是每个 CPU 运行 1 个工作进程 。
- 最大化 worker_connections 。
- 启用 Gzip 压缩:压缩文件大小,减少了客户端 HTTP 的传输带宽,因此提高了页面加载速度 。
- 主流NOSQL的比较与技术选型
- 排名前20位最受欢迎的黑客工具
- 如何成为百度搜索的精选摘要?
- 9层妖塔在青海哪个地方? 青海的九层妖塔
- docker基础篇-安装
- 性取向的分类 什么叫第四性取向
- 我的网站真的需要云负载均衡器吗?
- 16种编程语言是如何命名的?
- Nginx+SpringBoot实现负载均衡
- 中国文化中的茶影像概说
