Nginx基础概念

Xiao Qiang Lv4

Nginx基础概念

  • Nginx是一个web服务器
  • 监听http端口
  • 静态或者动态的网站内容
  • 反向代理
    • 负载均衡
    • 后端路由
      • eg:如果后端unhealthy的时候,可以做一些其他的事情,比如说使用其他的后端服务
    • 缓存(caching)
      • 减少和后端的一些的重复的调用
    • 网管API
      • 限制请求
      • 路由匹配 (根据API版本来路由匹配)

nginx 架构图

  • timeout in nginx
    • frontend timeouts (用户向nginx请求是发生的timeout)
      • client_header (读取用户https请求头部的timeout,默认60s)
      • client_body
      • send (默认60s,传输时间太长,导致超时,关闭链接)
      • keepalive (默认75s,不会让idle的链接一直空闲在那里,eg:如果一个链接太久不用了,就会被关闭)
      • lingering (用户可以发送请求,但是Nginx不会给回response,一直等待,网络超时,链接关闭)
      • resolver (DNS域名解析超时,默认30s
    • backend timeout
      • proxy_connect (NGINX和backend链接时,会有healthcheck,检查这个backend service是否正常工作,尽可能把这个设置的小,一般来说,不要超过75s)
      • proxy_send (定义为两次连续的写操作之间的时间,接下来的是content超过了设置的时间没有发送给backend,这样nginx到backend的链接就会超时,关闭)
        • 可以释放当前链接,以供其他的client建立链接
      • proxy_read (和写超时相反,nginx读后端返回数据时超时, 返回数据的时间太慢,proxy nginx将会关闭链接,有利于节约链接时长)
      • proxy_next_upstream (默认0s,一般设置在4-5s左右,不需要太长的时候去决定使用哪一个上游服务)
      • keepalive (减少空闲时间,如果太长时间没有数据的传输,关闭链接,一般设置为60s
  • nginx 4 layer or 7 layer Load balancing
    • layer 4/7都是参考 OSI model,主要操作TCP/Ip或者application
    • layer 4 -> TCP/IP,当Nginx不用关心具体的协议时,这时Nginx可以用作第四层的代理(操作流)
    • layer 7 -> application,当NGINX需要转发后端的链接或者获取一些cache,或者向http的头部中添加信息,这时Nginx可以被用作是应用层的代理(操作内容)
  • TLS(Transport layer security,一种E2E的加密协议,比如说我们知道的对称密钥加密,协议只能保证数据在传输过程中不被监听或者篡改) Termination vs. TLS passThrough
    • Termination就是在请求传输到Nginx的时候,Nginx会做解密操作,然后在转发到后端的接口(Nginx为https,BE为http,在cloud中不需要加密,服务之间可以直接通信),如果Nginx和BE都是https,那么Nginx在转发数据时,就需要先解密然后在加密(TLS origination),这两种模式的应用场景是啥?
    • passThrough,不信任Nginx,不对数据做任何操作,只有TCP层的检查,检查,resource IP&port,destination IP&port,NGINX不知道传输的内容,这样可能更加的安全,Nginx在这种模式中就是充当一个隧道的作用,不好的地方,每一个http call都需要建立一个tunnel,这样会造成比较大的花销
  • NGINX internal architecture
    • NGINX会根据服务器的硬件CPU核心数来设置worker processor,比如说当前电脑的核心数是2 cores,那么worker processors将会被设置为4个(hyper threading disable,那么processor和核心数将会只有一一对应,这个设置取决于你电脑的配置),worker processor加解密数据,路由转发等等。
    • kernel TLS ktls
    • Question:每个processor是如何分配的,如果当前的processor都被占用了,如何等待?
  • Title: Nginx基础概念
  • Author: Xiao Qiang
  • Created at : 2023-03-22 12:25:07
  • Updated at : 2025-03-08 10:49:30
  • Link: http://fdslk.github.io/tech/ops/proxy/2023/03/22/ops-nginx/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
Nginx基础概念