面试被常问的Nginx
1.反向代理服务器Nginx
Nginx是一款由俄罗斯程序员以C语言开发的一块高性能HTTP服务器,它轻量并且性能极高、支持的功能也相对丰富而且支持组件式拓展和Lua脚本的支持。 正向代理:就是客户端代理,代理的是客户端,请求通过代理服务器去访问服务器。 反向代理:代理的是服务端,客户端对服务端的访问无感,直接面对的就是Nginx。
2.nginx.conf
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切换消耗)
- 工作进程相互独立、互不干扰,不会雪崩,如果是多线程模式,如果进程出现故障那么整个服务将受到影响。