俄罗斯“黑科技”——Nginx的基本理论

俄罗斯“黑科技”——Nginx的基本理论

Scroll Down

Nginx的基本理论

1.什么是Nginx?

Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器(正向代理服务器),同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。自Nginx 发布来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

简单来说就是 Nginx是一个HTTP服务器和反向代理服务器。

2.Nginx的优点

1.高并发连接:
官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
2.内存消耗少:
在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
3.配置文件非常简单:
风格跟程序一样通俗易懂。
4.成本低廉:
Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
5.支持Rewrite重写规则:
能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。
.内置的健康检查功能:
如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
7.节省带宽:
支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
8.稳定性高:
用于反向代理,宕机的概率微乎其微

3.Nginx的处理http请求

Nginx会在启动的时候读取配置文件,得到监听的ip与端口,然后在master进程里面初始化这个监控的socket,然后fork出多个子线程出来,子线程会竞争新的连接,一旦客户端与Nginx三次握手后,一个子线程会拿到这个连接的socket,然后进行事件处理,最后由Nginx或者客户端来主动关闭连接。

4.Nginx是如何实现高并发的?

Nginx异步、非阻塞,使用了epoll和大量底层代码优化
如果采用多线程的方式,每个请求进来都是一个新的线程处理,那么CPU在处理多线程的时候,会进行上下文转换,浪费时间,而Nginx采用异步非阻塞的方式,一个请求会有一个worker进行处理,但不是全程参与,在可能发生阻塞的地方,worker会空闲出来待命,而master负责管理worker与收集请求信息,到达高可用的作用

4.为什么 Nginx 不使用多线程?

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会耗光服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。

5.Nginx常见的优化配置有哪些?

(1) 调整worker_processes
指Nginx要生成的worker数量,最佳实践是每个CPU运行1个工作进程。
(2) 最大化worker_connections
最大客户端数/秒=工作进程*工作者连接数
(3) 启用Gzip压缩
(4) 为静态文件启用缓存
(5) Timeouts
(6) 禁用access_logs

6.502网关错误

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序必须通过FastCGI接口来调用
(1) FastCGI进程是否已经启动

(2) FastCGI worker进程数是否不够

(3) FastCGI执行时间过长

(4) FastCGI Buffer不够

7.Nginx与Apache的区别

image.png