2024-01-15|Nginx配置结构与指令语法

今天做了什么:

1、看 JHipster 源码发现这两个类库

  • jackson-datatypes-collections 支持 hppc 数据类型。hppc:Java 的高性能原始集合,HPPC 为所有 Java 基元类型提供典型集合的模板生成实现,例如列表、集合和映射。HPPC 背后的主要驱动力是针对最高性能和内存效率的优化。

  • Handy-URI-Templates A Java URI Template processor implementing RFC6570

2、整理文档《Nginx进程模型》、《Nginx配置结构与指令语法》

Nginx配置结构与指令语法

Nginx的配置文件使用一种块结构和指令语法来定义服务器的行为和属性。以下是Nginx配置文件的基本结构和指令语法:

基本结构和指令语法

  1. 配置文件结构:
    • Nginx配置文件由多个块(Block)组成,每个块用花括号 {} 括起来。
    • 主要的配置块是 http 块,用于全局HTTP配置。
    • http 块内部,可以包含多个 server 块,每个 server 块用于配置一个虚拟主机。
    • server 块内部,可以包含多个其他块(如 location 块),用于配置请求的处理规则。
  2. 指令语法:
    • 指令是配置文件中的关键字,用于指定服务器的行为和属性。
    • 指令通常由指令名称和参数组成,中间使用空格分隔。
    • 指令以分号 ; 结束。
    • 有些指令可以包含块结构,以定义更复杂的配置规则。

以下是一个示例的Nginx配置文件的结构和指令语法:

# 全局配置块
http {
    # 全局指令
    directive_name parameter;

    # 服务器块
    server {
        # 服务器指令
        directive_name parameter;

        # 位置块
        location / {
            # 位置指令
            directive_name parameter;
        }
    }
}

在上面的示例中,http 是全局配置块,server 是服务器块,location 是位置块。每个块内部可以包含相应的指令。

注意事项:

  • 指令名称对大小写不敏感,但通常以小写字母表示。
  • 多个指令可以在同一行上用分号 ; 分隔。
  • 注释以 # 开头,并在行的任何位置添加。
  • 可以使用变量和预定义变量来设置指令参数。

nginx.conf 配置

  1. user:设置Nginx工作进程的运行用户和用户组。默认情况下,Nginx以nobody用户运行。
    • 语法:user username [groupname]
    • 例如:user nginx;user nginx nginx;
  2. worker_processes:设置Nginx工作进程的数量。可以是一个整数值或auto。通常,建议将其设置为服务器可用CPU核心数量的一倍或两倍,以充分利用服务器的性能。
    • 语法:worker_processes number | auto
  3. error_log:用于设置错误日志文件的路径和级别
    • 语法:error_log file [level];
    • file:指定错误日志文件的路径。
    • level:可选参数,指定记录的错误级别。
      • 常见的级别包括 emergalertcriterrorwarnnoticeinfodebug
      • 默认情况下,错误日志的级别为 error
      • 可以使用 syslog:facility.level 格式将错误日志发送到系统日志(syslog)中。
  4. events:配置与Nginx事件相关的参数。
    • 语法:events {}
    • 常用的参数包括:
      • worker_connections:每个工作进程的最大并发连接数。
      • multi_accept:是否接受多个请求同时处理。
      • use:指定事件模块(如epollkqueue等)。
  5. http
    • 语法:http {}
    • 定义全局HTTP配置。
    • 常用的指令包括:
      • include:包含其他配置文件。
      • default_type:设置默认的Content-Type。
      • access_log:定义访问日志的位置和格式。
      • sendfile:用于控制是否使用操作系统提供的零拷贝技术进行文件传输。当启用 sendfile 时,Nginx 可以直接将文件从磁盘读取并发送到客户端,而无需将文件内容复制到用户空间。这可以显著提高文件传输的效率和性能。
        • sendfile 设置为 on 时,Nginx 将尝试使用操作系统提供的 sendfile() 系统调用进行文件传输。
        • sendfile 设置为 off 时,Nginx 将使用普通的方式进行文件传输,即通过将文件内容从磁盘复制到用户空间再发送给客户端。
        • 在大多数情况下,默认值 sendfile off 是安全和可靠的选择,但在某些情况下,启用 sendfile 可能会带来更好的性能和效率。
        • 启用 sendfile 可以降低 CPU 和内存的使用量,但在某些特定的操作系统或文件系统中,可能会出现某些问题,如传输不完整或文件内容损坏等。因此,在启用 sendfile 之前,建议进行充分的测试和评估。
      • tcp_nopush
        • tcp_nopush 设置为 on 时,Nginx 将启用 TCP_CORK 选项,数据将被缓冲并一次性发送给客户端,以提高传输效率。
        • tcp_nopush 设置为 off 时,Nginx 将禁用 TCP_CORK 选项,数据将立即发送给客户端,减少延迟。
        • 在大多数情况下,使用默认值 tcp_nopush off 是安全和可靠的选择,可以减少延迟。
        • 然而,在某些具体的场景中,如高带宽、低延迟的网络环境,启用 tcp_nopush on 可以提高传输效率,但可能会增加延迟。
      • keepalive_timeout:设置与客户端的 HTTP keep-alive 连接的超时时间。HTTP keep-alive 允许客户端和服务器之间的多个 HTTP 请求和响应共享同一个 TCP 连接,以减少连接建立和关闭的开销。
        • keepalive_timeout 指定了一个持续连接的超时时间。如果在超过指定的时间内没有新的请求到达,Nginx 将关闭 keep-alive 连接。
        • 当客户端发送新请求时,超过 keepalive_timeout 的连接将被关闭,并在必要时重新创建一个新的连接。
        • 默认情况下,keepalive_timeout 设置为 65 秒。
        • 如果将 keepalive_timeout 设置为 0,表示禁用 keep-alive 连接,每个请求将使用独立的连接。
        • 可以使用 s 后缀表示秒,或使用 ms 后缀表示毫秒。
      • gzip:用于启用或禁用对响应进行 Gzip 压缩。Gzip 压缩是一种在服务器端将响应内容进行压缩,然后再发送给客户端的技术,可以减少传输数据的大小,提高网络传输效率。
        • gzip 设置为 on 时,Nginx 将对响应内容进行 Gzip 压缩。
        • gzip 设置为 off 时,Nginx 将禁用 Gzip 压缩。
        • 启用 Gzip 压缩可以显著减少传输数据的大小,提高网络传输效率,但会增加服务器的 CPU 和内存负载。
        • 在启用 Gzip 压缩之前,建议评估服务器的性能和资源使用情况,确保服务器具备足够的计算资源来处理压缩操作。
        • 可以通过配置 gzip_types 指令来指定要进行 Gzip 压缩的 MIME 类型。
        • 还可以通过配置 gzip_comp_level 指令来调整 Gzip 压缩的压缩级别。
  6. server
    • 语法:server {}
    • 配置虚拟主机。
    • 常用的指令包括:
      • listen:定义监听的端口号和地址。
      • server_name:定义虚拟主机的域名。
      • root:指定根目录的路径。
      • index:定义默认的索引文件。
      • error_page:用于定义在特定 HTTP 错误状态码出现时,向客户端发送自定义错误页面的路径或重定向到其他 URL。
        • 语法:error_page [error_code] [action];
        • 适用范围:http, server, location 配置块内部。
        • error_page 指定了特定 HTTP 错误状态码的处理方式。
        • error_code 参数指定了要处理的 HTTP 错误状态码,如 404、500 等。还可以使用通配符 * 匹配所有错误状态码。
        • action 参数定义了对应错误状态码的处理行为。可以有以下几种处理方式:
          • 发送自定义错误页面:error_page error_code path;,其中 path 是自定义错误页面的路径。
          • 重定向到其他 URL:error_page error_code redirect_url;,其中 redirect_url 是要重定向的 URL。
          • 使用默认的 Nginx 错误页面:error_page error_code =default;,将使用 Nginx 默认的错误页面。
          • 返回空响应:error_page error_code =;,将返回一个空的响应,即不发送任何内容给客户端。
  7. location
    • 语法:location [modifier] uri {}
    • 配置请求的处理规则。
    • 常用的指令包括:
      • root:指定根目录的路径。
      • proxy_pass:反向代理到指定的后端服务器。
      • try_files:尝试匹配多个文件或路径。
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    #默认使用 epoll 模式
    use epoll; 
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    #gzip_types text/plain text/html;
    #gzip_comp_level 5;

    include /etc/nginx/conf.d/*.conf;
}
Share this post:

Related content