配置文件

单位

时间单位

参数 意义
ms milliseconds
s seconds
m minutes
h hours
d days
w weeks
y years (365 days)

空间单位

配置 意义
不写 bytes
k/K kilobytes
m/M megabytes
g/G gigabytes

原则

  • 配置文件的根目录,为编译时 --PREFIX 指定的路径
  • 有遇到目录之类的设置,需要让 nginx 的 user 有读写权限

结构

  • main 全局配置
    • event 事件模块设置
    • http http 核心模块设置
      • server 可以有多个
        • location 可以有多个

main

  • 核心参数
  1. user <username> [<group>]

    1. 指定 worker process 的属主和属组,属组可以不指定
  2. pid <pid_directory>

    1. 指定 master process 的 pid 存放路径
  3. worker_rlimit_nofile <number>

    1. 指定 worker process 可以打开的最大文件句柄数
  4. worker_rlimit_core <file_size>

    1. 指定 worker process 异常终止后的 core 文件,用于记录和分析问题
    2. 配合 working_directory <core_file_dir> 使用, 对应目录需要设置的 **user** 用户拥有写权限

**

  1. worker_processes <number> | auto

    1. worker process 的数量,auto 则数量和 cpu 挂钩
    2. 需要配合 worker_cpu_affinity 充分发挥多核 cpu 性能
  2. worker_cpu_affinity <cpu_mask1> <cpu_mask2> ...

    1. worker_processes 仅仅规定起多少个 worker process,但是没有规定如何 process 用哪几个 cpu 核心
    2. cpu_mask 看多少核就几位,其中1表示启用
      1. 假设 worker_processes 2
        1. 两核 cpu 全部用,则 worker_cpu_affinity 01 10
        2. 两核 cpu 用一个,则 worker_cpu_affinity 01
        3. 四核 cpu 全部用,其中 worker1 用 cpu0 和 1 ,worker2 用 cpu2 和 3,则 worker_cpu_affinity 0011 1100
        4. 四个 cpu 用两个,其中 worker1 用 cpu0,worker2 用 cpu4, 则 worker_cpu_affinity 0001 1000
      2. 直接设置 auto 就好了
  3. worker_priority <number>

    1. 指定 worker process 的 nice 值(-20~+19),调整运行 nginx 的优先级(越小优先级越高)
    2. 通常设置为负数,优先调用 nginx
    3. linux 默认进程的优先级值是 120,最终优先级值是 默认值 + nice 值

**

  1. worker_shutdown_timeout <time>

    1. 指定 worker process 优雅退出时的超时时间
  2. timer_resolution <time>

    1. worker process 内部使用的计时器精度,<time> 越大,系统在用户态和内核态之间的调度越少,性能越高
  3. daemon off | on

    1. 设置 nginx 的运行方式,默认 on
    2. off 前台,用于用户调试
  4. lock_file <file>

    1. event 中的 accept_mutex_delay on 设置时生效
    2. 负载均衡互斥锁文件存放路径

event

  1. use <method>
    1. nginx 使用哪种事件驱动模型
    2. 默认配置,无
    3. 推荐让 nginx 自己选择,即不指定

**

  1. worker_connections <number>

    1. worker process 能够处理的最大并发连接数
    2. 默认配置, 1024
    3. 推荐配置 65535 / worker_processes | 65535
  2. accept_mutex on | off

    1. 是否打开负载均衡互斥锁,开启时,worker process 会轮流处理到来的请求
    2. 默认配置 off,每次请求到来时,master process 会询问每个 worker process 看是否能处理请求,耗费性能
  3. accept_mutex_delay <time>

    1. accept_mutex_delay on 时生效
    2. 新连接分配给 worker process 的超时时间,如果对应 worker process 没有响应 master process 对请求的选择事件
    3. 默认 500ms
    4. 推荐 200ms
  4. muti_accept on | off

    1. 一个 worker process 是否可以同时接受所有的新连接
    2. 默认 off,nginx一个工作进程只能同时接受一个新的连接
    3. 推荐 on
      1. 如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量

server

  1. server_name <name1> <name2> ...
    1. 配置基于名称的虚拟主机,匹配方法就是靠请求携带的 host 和 port 正好对应其配置中的 server_name 和listen
    2. name 可以匹配最左和最右通配符、正则
    3. 优先级,从高到低
      1. 精确匹配
      2. 最左通配符匹配
      3. 最右通配符匹配
      4. 正则匹配
  2. root alias | 命令 | 存在的上下文 | 区别 | | —- | —- | —- | | root | http server location if | 会将定义路径和 server 定义的 URI 叠加 | | alias | location | server 映射的 URI 等同于 定义路径 |

server 和 location 的url匹配

  • [=|~|*|^~]`

    • 上下文 server location | 匹配规则 | 含义 | | —- | —- | | = | 普通字符精确匹配 | | ~ | 正则匹配,区分大小写 | | ~* | 正则匹配,不区分大小写 | | ^~ | 普通字符前缀匹配 | | 不带符号 | |

    • 优先级,从高到低()

      • =
      • ^~
      • ~
      • ~*
      • 不带符号

        <uri> 末尾带斜 / 的区别

      • 不带: 默认会查找 uri 同名目录下的 index.html,找不到会找同名文件

      • 带: 默认会查找 uri 同名目录下的 index.html