Nginx(二):主配置文件 nginx.conf 6个指令块


文章目录

    • 主配置文件 nginx.conf 详解
      • 1. 全局块
      • 2. events 块 (I/O 事件块)
      • 3. HTTP 块
      • 4. Server 块
      • 5. Location 块
      • 6. Upstream 块
      • 1. 全局块
      • 2. events 块 (I/O 事件块)
      • 3. HTTP 块
      • 4. Server 块
      • 5. Location 块
      • 6. Upstream 块


主配置文件 nginx.conf 详解

文件位置: /usr/local/nginx/conf/nginx.conf

概述:

  1. 全局块:全局配置,对全局生效;
  2. events块:配置影响 Nginx 服务器与用户的网络连接
  3. http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
  4. server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
  5. location块:用于配置匹配的 uri ;
  6. upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

Nginx(二):主配置文件 nginx.conf 6个指令块_第1张图片

1. 全局块

配置 Nginx 运行的全局参数,影响整个 Nginx 服务器的行为。

  • user nobody;
    运行 Nginx 服务的用户,默认是 nobody

  • worker_processes 1;
    设置工作进程数,通常与 CPU 核数相等。设置为 auto 时,Nginx 会自动检测并设定。一般不超8个。

  • error_log logs/error.log;
    错误日志文件的位置。

  • pid logs/nginx.pid;
    指定 Nginx 的 PID 文件存储位置。

  • worker_rlimit_nofile 65535;
    设置每个 worker 进程可以打开的最大文件句柄数(文件描述符数),默认为 1024,建议设置较高值如 65535 以应对高并发场景。在 Nginx 处理网络请求时,每个连接都会消耗一个文件描述符。

    例如,每个网络连接(包括客户端连接和与后端服务器的连接)都需要一个文件描述符。除此之外,Nginx 还可能打开其他文件描述符(如日志文件、静态文件等)。

    如果没有足够的文件描述符,Nginx 进程将无法处理更多的连接,系统会报错。

2. events 块 (I/O 事件块)

管理与网络连接相关的配置,通常包含 IO 模型和连接设置。

events {
    use epoll;                   
### 使用高效的 epoll IO 模型
    worker_connections 65535;     
### 每个 worker 进程可处理的最大并发连接数
    multi_accept on;              
### 一次接受尽可能多的连接
    accept_mutex on;              
### 防止惊群问题,串行处理新连接
}
  • use epoll;
    使用 epoll IO 模型提升性能,适合高并发场景。2.6及以上版本的系统内核,建议使用epoll模型以提高性能。

  • worker_connections 65535;
    设置每个 worker 子进程能处理的最大连接数(理论数值)。反向代理场景下,一个请求会同时消耗 2 个连接(一个连接到客户端,一个连接到后端服务器),因此 worker_connections 的实际并发处理能力可能会减半。

  • multi_accept on;

    告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接。

  • accept_mutex on;
    串行接收新连接,防止资源浪费。

    告诉nginx收到一个新连接通知后接受尽可能多的连接,设置为off,关闭时一次接收一条连接。

    默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题。

  • 注意:最大连接数受操作系统打开文件数(open files)限制。

    如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。

    在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

    可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。

    epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

    worker_processes的值和work_connections的值决定了最大并发数量,最大并发数计算方式为 : worker_processes*worker_connections 。但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: worker_processes*worker_connections/2

    查看: ulimit -a

    设置: ulimit -HSn 65535

    永久设置: vim /etc/security/limits.conf

    文件添加” soft nofile 65535“ 和 “hard nofile 65535”

Nginx(二):主配置文件 nginx.conf 6个指令块_第2张图片

简述:Nginx的最大并发如何设置?

  1. Nginx应用程序配置 (nginx.conf)
  • worker_processes:设置工作进程数,通常为与CPU核心数相同,或使用auto
  • worker_connections:每个worker进程能够处理的最大连接数。
  • worker_rlimit_nofile:设置每个worker进程可以打开的最大文件数。
  1. Linux操作系统配置
  • ulimit -SHn 65535:设置指定进程可以打开的最大文件数。

  • /etc/security/limits.conf

    *   soft    nofile   65535
    *   hard    nofile   65535
    

3. HTTP 块

负责 HTTP 服务相关配置,影响静态文件处理、日志、压缩等内容。

http {
    include       mime.types;    
##文件扩展名与 MIME 类型映射表
    default_type  application/octet-stream;    ##默认文件类型

    ##日志格式配置
    # log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                   '$status $body_bytes_sent "$http_referer" '
    #                   '"$http_user_agent" "$http_x_forwarded_for"';

    ##访问日志路径
    # access_log  logs/access.log  main;
    
    sendfile        on;     ##开启高效文件传输模式(启用内核复制模式,大幅提高IO效率)
    
    tcp_nopush     on;      ##减少 TCP 报文段数量,需 sendfile 支持
    
    tcp_nodelay    on;      ##防止网络延迟

    keepalive_timeout  65;  ##连接保持超时时间,单位是秒
    gzip  on;               ##启用 Gzip 压缩
}
  • include mime.types;
    包含 MIME 类型配置文件,确保不同文件格式被正确识别。

  • sendfile on;
    开启高效文件传输,减少 IO 消耗。

  • tcp_nopushtcp_nodelay

    开启,用于防止网络阻塞。必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。(将响应头和正文的开始部分一起发送,而不一个接一个的发送)

  • keepalive_timeout 65;
    设置长连接的超时时间。

  • gzip on;
    gzip模块设置,启用 Gzip 压缩,提升传输效率。

4. Server 块

配置虚拟主机,负责处理客户端请求。

server {
    listen 80;                 # 监听地址及端口
    server_name www.abc.com;   # 站点域名
    charset utf-8;             # 默认字符集

    location / {               # 网站根目录配置
        root html;             
        # 网站根目录的位置/usr/local/nginx/html
        index index.html index.php; 
        # 默认首页文件名
    }

    error_page 500 502 503 504 /50x.html;  
    # 错误页面处理反馈页面
    location = /50x.html {     # 错误页面配置
        root html;
    }
}
  • listen 80;
    监听 HTTP 的 80 端口。或 地址:端口
  • server_name www.abc.com;
    定义虚拟主机的域名。站点域名,可以有多个,用空格隔开。
  • root html;
    网站根目录位置。
  • error_page 500 502 503 504 /50x.html;
    自定义错误页面配置。

5. Location 块

用于匹配 URI,定义如何处理不同的 URL 请求。

location / {
    root html;
    index index.html index.php;
}
  • location /
    匹配根目录请求,配置文件根目录和默认首页文件。

6. Upstream 块

管理后端服务器的地址配置,用于负载均衡(本示例未展示)。

完成以上配置,Nginx 可以更灵活地处理多种并发请求,并实现静态资源的高效处理、压缩和负载均衡等功能。## 主配置文件 nginx.conf 详解

文件位置: /usr/local/nginx/conf/nginx.conf

概述:

  1. 全局块:全局配置,对全局生效;
  2. events块:配置影响 Nginx 服务器与用户的网络连接
  3. http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
  4. server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
  5. location块:用于配置匹配的 uri ;
  6. upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。

1. 全局块

配置 Nginx 运行的全局参数,影响整个 Nginx 服务器的行为。

  • user nobody;
    运行 Nginx 服务的用户,默认是 nobody

  • worker_processes 1;
    设置工作进程数,通常与 CPU 核数相等。设置为 auto 时,Nginx 会自动检测并设定。一般不超8个。

  • error_log logs/error.log;
    错误日志文件的位置。

  • pid logs/nginx.pid;
    指定 Nginx 的 PID 文件存储位置。

  • worker_rlimit_nofile 65535;
    设置每个 worker 进程可以打开的最大文件句柄数(文件描述符数),默认为 1024,建议设置较高值如 65535 以应对高并发场景。在 Nginx 处理网络请求时,每个连接都会消耗一个文件描述符。

    例如,每个网络连接(包括客户端连接和与后端服务器的连接)都需要一个文件描述符。除此之外,Nginx 还可能打开其他文件描述符(如日志文件、静态文件等)。

    如果没有足够的文件描述符,Nginx 进程将无法处理更多的连接,系统会报错。

2. events 块 (I/O 事件块)

管理与网络连接相关的配置,通常包含 IO 模型和连接设置。

events {
    use epoll;                   
### 使用高效的 epoll IO 模型
    worker_connections 65535;     
### 每个 worker 进程可处理的最大并发连接数
    multi_accept on;              
### 一次接受尽可能多的连接
    accept_mutex on;              
### 防止惊群问题,串行处理新连接
}
  • use epoll;
    使用 epoll IO 模型提升性能,适合高并发场景。2.6及以上版本的系统内核,建议使用epoll模型以提高性能。

  • worker_connections 65535;
    设置每个 worker 子进程能处理的最大连接数(理论数值)。反向代理场景下,一个请求会同时消耗 2 个连接(一个连接到客户端,一个连接到后端服务器),因此 worker_connections 的实际并发处理能力可能会减半。

  • multi_accept on;

    告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接。

  • accept_mutex on;
    串行接收新连接,防止资源浪费。

    告诉nginx收到一个新连接通知后接受尽可能多的连接,设置为off,关闭时一次接收一条连接。

    默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题。

  • 注意:最大连接数受操作系统打开文件数(open files)限制。

    如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。

    在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。

    可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。

    epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

    worker_processes的值和work_connections的值决定了最大并发数量,最大并发数计算方式为 : worker_processes*worker_connections 。但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: worker_processes*worker_connections/2

    查看: ulimit -a

    设置: ulimit -HSn 65535

    永久设置: vim /etc/security/limits.conf

    文件添加” soft nofile 65535“ 和 “hard nofile 65535”

    Nginx(二):主配置文件 nginx.conf 6个指令块_第3张图片

简述:Nginx的最大并发如何设置?

  1. Nginx应用程序配置 (nginx.conf)
  • worker_processes:设置工作进程数,通常为与CPU核心数相同,或使用auto
  • worker_connections:每个worker进程能够处理的最大连接数。
  • worker_rlimit_nofile:设置每个worker进程可以打开的最大文件数。
  1. Linux操作系统配置
  • ulimit -SHn 65535:设置指定进程可以打开的最大文件数。

  • /etc/security/limits.conf

    *   soft    nofile   65535
    *   hard    nofile   65535
    

3. HTTP 块

负责 HTTP 服务相关配置,影响静态文件处理、日志、压缩等内容。

http {
    include       mime.types;    
##文件扩展名与 MIME 类型映射表
    default_type  application/octet-stream;    ##默认文件类型

    ##日志格式配置
    # log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                   '$status $body_bytes_sent "$http_referer" '
    #                   '"$http_user_agent" "$http_x_forwarded_for"';

    ##访问日志路径
    # access_log  logs/access.log  main;
    
    sendfile        on;     ##开启高效文件传输模式(启用内核复制模式,大幅提高IO效率)
    
    tcp_nopush     on;      ##减少 TCP 报文段数量,需 sendfile 支持
    
    tcp_nodelay    on;      ##防止网络延迟

    keepalive_timeout  65;  ##连接保持超时时间,单位是秒
    gzip  on;               ##启用 Gzip 压缩
}
  • include mime.types;
    包含 MIME 类型配置文件,确保不同文件格式被正确识别。

  • sendfile on;
    开启高效文件传输,减少 IO 消耗。

  • tcp_nopushtcp_nodelay

    开启,用于防止网络阻塞。必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。(将响应头和正文的开始部分一起发送,而不一个接一个的发送)

  • keepalive_timeout 65;
    设置长连接的超时时间。

  • gzip on;
    gzip模块设置,启用 Gzip 压缩,提升传输效率。

4. Server 块

配置虚拟主机,负责处理客户端请求。

server {
    listen 80;                 # 监听地址及端口
    server_name www.abc.com;   # 站点域名
    charset utf-8;             # 默认字符集

    location / {               # 网站根目录配置
        root html;             
        # 网站根目录的位置/usr/local/nginx/html
        index index.html index.php; 
        # 默认首页文件名
    }

    error_page 500 502 503 504 /50x.html;  
    # 错误页面处理反馈页面
    location = /50x.html {     # 错误页面配置
        root html;
    }
}
  • listen 80;
    监听 HTTP 的 80 端口。或 地址:端口
  • server_name www.abc.com;
    定义虚拟主机的域名。站点域名,可以有多个,用空格隔开。
  • root html;
    网站根目录位置。
  • error_page 500 502 503 504 /50x.html;
    自定义错误页面配置。

5. Location 块

用于匹配 URI,定义如何处理不同的 URL 请求。

location / {
    root html;
    index index.html index.php;
}
  • location /
    匹配根目录请求,配置文件根目录和默认首页文件。

6. Upstream 块

管理后端服务器的地址配置,用于负载均衡(本示例未展示)。

完成以上配置,Nginx 可以更灵活地处理多种并发请求,并实现静态资源的高效处理、压缩和负载均衡等功能。


注:图片来源于网络,侵删。

你可能感兴趣的:(nginx,网络,运维,服务器,运维开发,云计算,linux)