HAOJX

nginx架构基础相关知识

字数统计: 717阅读时长: 2 min
2018/10/05 Share

1.如何进行热部署

  • 先将现有的nginx二进制文件备份一下cp nginx nginx.old
  • 再将编译好的nginx二进制文件复制进来
  • 执行kill -USR2 112233 这个112233是现在的nginx的master进程pid号 , 这是告诉nginx的master要优雅退出
  • 执行kill -WINCH 112233 这个告诉老的nginx的worker进程要优雅退出

2.如何进行日志切割

  • 先将老的access.log备份
  • 执行nginx -s reopen , 这个时候就会再重新生成一份access.log , 当然也可以执行kill -USR1 112233

    3.nginx的进程结构

它的进程结构是: 一个master进程 + 多个worker进程 + 一个Cache Manger进程 + 一个Cache Loader进程 , 其中 一个worker进程占一个cpu, 大部分情况是有几个cpu就搞几个worker进程

4.如何用信号管理nginx进程

nginx进程之间会通过信号来管理, 其中:

master进程会接受如下信号:

  • TERM , INT (相当于-s stop 会立刻停止)
  • QUIT 优雅停止
  • HUB 重载配置文件
  • USER1 切割日志
  • USER2 ,WINCH 热部署的时候使用

worker进程会接受这样的信号: TERM , QUIT , USER1 , WINCH , 也可以使用nginx命令行:

reload(相当于HUB信号) , quit(QUIT) , reopen(USER1) , stop(TERM)

5.nginx热升级流程

  • 将nginx文件换成新nginx文件
  • 向老master进程发送USER2信号
  • master进程修改pid文件名 , 加后缀.oldbin
  • nginx用新nginx文件启动新nginx进程
  • 向老master进程发送WINCH , 关闭老worker进程
  • 回滚: 向老master进程发送HUB , 向新master进程发送QUIT

6.worker进程如何优雅关闭

  • 设置定时器worker_shutdown_timeout
  • 关闭监听句柄
  • 关闭空闲连接
  • 在循环中等待关闭全部连接
  • 退出进程

7.nginx的模块分类

每个模块的源代码中, 都会有个ngx_module_t的结构体 , 这个结构体下面的type就标识了它属于哪个模块分类

一般来说分为4类 :

  • events模块 , 这个就是NGX_EVENT_MODULE
  • http类模块: NGX_HTTP_MODULE 其中有ngx_http_core_module , 处理请求模块 , 响应过滤模块 , upsteam模块
  • mail模块: NGX_MAIL_MODULE ngx_mail_core_module
  • stream模块: NGX_STREAM_MODULE
  • 还有一个特殊的conf模块: NGX_CONF_MODULE

在下载好nginx的源代码并解压以后, 会看到src目录 , 下面会有许多子目录 这些目录大部分就是模块的分类了 , 比如解压到了/usr/local/下 那这个目录下的src/http 就是属于http模块的 , 进入到这个目录下 , 发现还有一个modules的子目录 , 这个是用来放可有可无的模块

8.worker协同工作的关键: 共享内存

有哪些模块使用了共享内存:

  • Ngx_http_lua_api

  • 使用rbtree(红黑树)容器的模块:

    • Ngx_stream_limit_conn_module

    • Ngx_http_limit_conn_module

    • Ngx_stream_limit_req_module

    • http cache

      • Ngx_http_file_cache
      • Ngx_http_proxy_module
      • Ngx_http_scgi_module
      • Ngx_http_uwsgi_module
      • Ngx_http_fastcgi_module
    • ssl:

      • Ngx_http_ssl_modul
      • Ngx_mail_ssl_module
      • Ngx_stream_ssl_module
  • 单链表:

    • Ngx_http_upstream_zone_module

    • Ngx_stream_upstream_zone_module

9. nginx有哪些容器

有 数组 , 链表, 队列, 红黑树 , 哈希表, 基数树

CATALOG
  1. 1. 1.如何进行热部署
  2. 2. 2.如何进行日志切割
  3. 3. 3.nginx的进程结构
  4. 4. 4.如何用信号管理nginx进程
  5. 5. 5.nginx热升级流程
  6. 6. 6.worker进程如何优雅关闭
  7. 7. 7.nginx的模块分类
  8. 8. 8.worker协同工作的关键: 共享内存
  9. 9. 9. nginx有哪些容器