Skip to content

Nginx配置文件详细注释 ​

全局配置部分 ​

bash
#==工作进程数,一般跟cpu核数相同或为它的倍数
worker_processes  auto;         # 自动检测CPU核心数并设置工作进程数
worker_rlimit_nofile 102400;    # 每个工作进程可以打开的最大文件描述符数量

events {
    worker_connections 32767;    # 每个工作进程可同时建立的最大连接数
    multi_accept on;             # 允许一次性接受多个新连接
}

HTTP模块全局配置 ​

nginx
http {
    access_log off;              # 关闭访问日志记录,减少I/O开销

    include       mime.types;    # 包含MIME类型配置文件
    default_type  application/octet-stream;  # 默认MIME类型

    # 优化文件传输性能
    sendfile        on;          # 启用零拷贝技术,直接在内核空间传输文件
    tcp_nopush      on;          # 数据包最大化发送,减少网络开销

    # 文件上传大小限制
    client_max_body_size 500m;   # 客户端上传文件最大大小为500MB

    # 服务器名称哈希表大小设置
    server_names_hash_bucket_size 512;  # 允许更长的服务器名称

    # 客户端请求头相关设置
    client_header_buffer_size 512k;     # 请求头缓冲区大小
    large_client_header_buffers 4 512k; # 大型请求头缓冲区配置

    # FastCGI相关超时设置(用于与PHP、.NET等后端通信)
    fastcgi_connect_timeout 1200s;      # 连接超时时间
    fastcgi_send_timeout 1200s;         # 发送请求超时时间
    fastcgi_read_timeout 1200s;         # 读取响应超时时间
    fastcgi_buffer_size 128k;           # 缓冲区大小
    fastcgi_buffers 8 128k;             # 缓冲区数量和大小
    fastcgi_busy_buffers_size 128k;     # 忙碌缓冲区大小
    fastcgi_temp_file_write_size 256k;  # 临时文件写入大小
    fastcgi_intercept_errors on;        # 拦截后端错误

    # GZIP压缩配置(当前已关闭)
    gzip off;                           # 关闭GZIP压缩功能
    # 下面是被注释的GZIP详细配置
    # gzip_min_length 1k;               # 最小压缩文件大小
    # gzip_buffers 4 16k;               # 压缩缓冲区大小
    # ...
}

## 上游服务器配置(负载均衡)

```nginx
# 登录API服务器组
upstream szyxLoginApi{
    keepalive 300;                     # 空闲连接池大小
    keepalive_timeout 120s;           # 空闲连接保持时间
    keepalive_requests 10000;         # 单个连接可处理的最大请求数
    server 127.0.0.1:9999 weight=3;   # 后端服务器地址及权重
    # 被注释的是其他可用服务器
    # server 172.16.154.73:9998 weight=10;
}

# 数字思睿项目API服务器组
upstream dsyxApi{
    server 127.0.0.1:9004;            # 后端服务器地址
    keepalive 300;                    # 空闲连接池大小
    keepalive_timeout 300s;           # 空闲连接保持时间
    keepalive_requests 500;           # 单个连接可处理的最大请求数
}

# 其他各种项目的上游服务器配置...

虚拟主机配置(以一个站点为例详细注释) ​

nginx
# 思睿云学站点配置
server {
    listen 80;                        # 监听80端口
    server_name szyx.srzx.com;        # 域名
    charset utf-8;                    # 字符集

    # 根路径配置,用于前端静态文件
    location / {
        proxy_http_version 1.1;       # 使用HTTP 1.1协议
        root C:/SiruiWeb/Szyx/front/dist;  # 静态文件根目录
        index index.html index.htm;   # 默认索引文件
        try_files $uri $uri/ /index.html;  # 尝试文件查找顺序,支持SPA应用
    }

    # API请求转发规则,使用正则排除特定路径
    location ~ /api(?!/userDock)(?!/overview).* {
        proxy_http_version 1.1;       # 使用HTTP 1.1协议
        proxy_set_header X-Real-IP $remote_addr;  # 传递真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递代理链信息
        proxy_set_header X-NginX-Proxy true;      # 标识是Nginx代理
        proxy_pass http://127.0.0.1:9999;         # 转发目标服务器
    }

    # 用户Dock API专用转发规则
    location ^~ /api/userDock {
        proxy_http_version 1.1;       # 使用HTTP 1.1协议
        proxy_set_header X-Real-IP $remote_addr;  # 设置真实IP头
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 代理链信息
        proxy_set_header X-NginX-Proxy true;      # Nginx代理标识
        proxy_pass http://szyxLoginApi/api/userDock;  # 转发到上游服务器组
    }

    # WebSocket长连接支持
    location /ws/ {
        proxy_http_version 1.1;       # 使用HTTP 1.1协议
        proxy_pass http://127.0.0.1:9999;  # 后端WebSocket服务地址
        proxy_read_timeout 864000s;   # 读取超时时间(10天)
        proxy_send_timeout 864000s;   # 发送超时时间(10天)
        proxy_set_header Upgrade $http_upgrade;  # WebSocket升级头
        proxy_set_header Connection "upgrade";   # 连接升级标识
    }

    # Nginx状态监控
    location /nginx_status {
       stub_status on;               # 启用状态页面
    }

    # 错误页面配置
    error_page 500 502 503 504 /50x.html;  # 定义服务器错误页面
    location = /50x.html {           # 错误页面位置
        root html;                   # 错误页面目录
    }
}

HTTPS站点配置示例 ​

nginx
server {
    proxy_connect_timeout 600s;      # 连接超时时间
    proxy_send_timeout 600s;         # 发送超时时间
    proxy_read_timeout 600s;         # 读取超时时间
    listen 443 ssl;                  # 监听443端口并启用SSL

    server_name szyx.srzx.com;       # 域名

    # SSL证书配置
    ssl_certificate C:/SiruiTools/nginx-1.26.1/cert/szyx.srzx.com.pem;  # 公钥文件
    ssl_certificate_key C:/SiruiTools/nginx-1.26.1/cert/szyx.srzx.com.key;  # 私钥文件

    # SSL会话缓存设置
    ssl_session_cache shared:SSL:1m;  # 会话缓存大小
    ssl_session_timeout 5m;          # 会话超时时间

    # SSL加密套件和协议设置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  # 加密算法
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 支持的SSL/TLS协议版本
    ssl_prefer_server_ciphers on;    # 优先使用服务器加密套件

    # 其他location配置与HTTP站点类似...
}

具有特殊设置的站点示例 ​

nginx
server {
    listen 20000;                    # 非标准端口监听
    server_name localhost;           # 本地主机名

    # 大文件传输相关设置
    client_max_body_size 200000M;    # 支持200GB的上传文件
    client_header_timeout 40m;       # 请求头超时时间(40分钟)
    client_body_timeout 40m;         # 请求体超时时间(40分钟)
    client_header_buffer_size 12800k;  # 请求头缓冲大小
    large_client_header_buffers 100 128k;  # 大型请求头缓冲设置

    # 代理超时设置
    proxy_connect_timeout 1800;      # 连接超时(30分钟)
    proxy_read_timeout 30m;          # 读取超时(30分钟)
    proxy_send_timeout 30m;          # 发送超时(30分钟)

    # 根目录设置
    root C:/SiruiWeb/Gjz_Race/front/html/pc/;  # 静态文件目录
    index index.html index.htm;      # 默认索引文件

    # GZIP压缩设置(此站点单独启用)
    gzip_proxied any;                # 对所有代理请求启用压缩
    gzip_buffers 4 16k;              # 压缩缓冲设置
    gzip_comp_level 6;               # 压缩级别(1-9)
    gzip_min_length 1k;              # 最小压缩文件大小
    gzip_http_version 1.1;           # HTTP版本要求
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png;  # 压缩的MIME类型
    gzip_vary on;                    # 添加Vary: Accept-Encoding头

    # 各种路由规则配置...
}

注意事项 ​

  1. 这个配置文件包含多个站点,每个站点都有自己的server块
  2. 上游服务器配置(upstream块)用于负载均衡
  3. 全局设置的超时时间可能会被各个站点的局部设置覆盖
  4. 大部分站点都设置了WebSocket支持,并且有很长的超时时间
  5. 文件上传大小限制在不同站点有不同配置,从500MB到200GB不等
  6. GZIP压缩全局已关闭,但某些特定站点单独启用了

方舟 · Ark