面试被常问的Nginx

73 阅读2分钟

大纲

  • 反向代理服务器
  • 配置文件总览
  • 反向代理和负载均衡
  • 限流
  • 动静分离
  • 连接池和长链接配置

1.反向代理服务器Nginx

Nginx是一款由俄罗斯程序员以C语言开发的一块高性能HTTP服务器,它轻量并且性能极高、支持的功能也相对丰富而且支持组件式拓展和Lua脚本的支持。 正向代理:就是客户端代理,代理的是客户端,请求通过代理服务器去访问服务器。 反向代理:代理的是服务端,客户端对服务端的访问无感,直接面对的就是Nginx。

2.nginx.conf

image.png

3.高级配置

3.1 限流

Nginx自带的限流方案有多重,其中用的比较多的有:漏洞算法和令牌桶算法。 漏桶

http {
    limit_req_zone $binary_remote_addr zone=minorLimit:1m rate=10r/s;
}
server {
    location / {
        limit_req zone=minorLimit;
        proxy_pass http://minor_upstream_1;
    }
}

rate代表每秒访问的次数,1m代表请求池的大小,1mb可以存储一万多个Request数据。 令牌桶

http {
    limit_req_zone $binary_remote_addr zone=minorLimit:1m rate=10r/s;
}
server {
    location / {
        limit_req zone=minorLimit burst=20 nodelay;
        proxy_pass http://minor_upstream_1;
    }
}
	burst代表超过请求阈值后能额外处理请求的数量。10r/s就是每100ms处理1个请求。

nodelay:禁止延迟处理burst设置的数量,全部立马处理。

3.2 动静分离

这个概念很好理解,就是将一些静态资源例如HTML、JS文件、图片等和服务器资源进行隔离配置访问。

3.3 长链接

http {
    keepalive_timeout  30s;
    keepalive_requests 10000;
}

Nginx的长链接配置默认是开启的。

3.4 连接池配置

worker_processes  8;#工作进程子数量,建议一般是CPU核心数的2倍
 
events {
        use epoll; # 网络IO模式,一般采用epoll性能最高,还有select、poll等。
        worker_connections  2048; #连接池大小,控制总的连接数或者文件描述符,根据具体服务器配置来设置
}

4.Nginx多进程模型

Nginx采用固定数量的多进程模型,由一个主进程和多个子进程来共同完成Nginx的能力。 主进程负责工作进程的分配、启动、停止等。 工作进程负责处理具体的HTTP请求,接受客户端连接和响应。 Nginx使用多进程模式原因:

  • 进程之间的空间相互独立,不会涉及并发安全问题。
  • 进程和CPU绑定,节省了多线程模式的CPU切换。(进程调度仍然需要CPU切换消耗)
  • 工作进程相互独立、互不干扰,不会雪崩,如果是多线程模式,如果进程出现故障那么整个服务将受到影响。