侧边栏壁纸
博主头像
qiqi 博主等级

行动起来,活在当下

  • 累计撰写 1 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

nginx配置文件参数详解

break
2021-04-13 / 0 评论 / 1 点赞 / 18 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2025-03-12,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、全局配置模块

user nginx;                      # 运行Nginx的用户和组(防止权限问题)

worker_processes auto;           # 工作进程数(auto=自动匹配CPU核心数)

worker_rlimit_nofile 65535;      # 单进程最大文件描述符数(需调整系统ulimit)

error_log /var/log/nginx/error.log warn;  # 错误日志路径及级别(debug|info|warn|error)

pid /var/run/nginx.pid;          # 主进程PID存储路径

2、events事件模块

events {
    worker_connections 2048;     # 单进程最大并发连接数(总连接数=worker_processes * worker_connections)
    multi_accept on;             # 一次性接受所有新连接(高并发场景必开)
    use epoll;                   # 事件驱动模型(Linux建议epoll,FreeBSD用kqueue)
    accept_mutex off;            # 关闭连接互斥锁(高并发时提升性能)
}

3、HTTP 核心模块

http {
    include /etc/nginx/mime.types;  # 包含MIME类型定义文件
    default_type application/octet-stream;  # 默认响应Content-Type
    charset utf-8;                # 默认字符集

    # 日志格式
    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;                # 合并数据包减少网络开销(需sendfile启用)
    tcp_nodelay on;               # 禁用Nagle算法(降低延迟)
    keepalive_timeout 65;         # 保持连接超时时间(单位:秒)
    client_max_body_size 100M;    # 客户端请求最大Body大小(上传文件需调整)

    # 连接池优化
    keepalive_requests 1000;      # 单个连接最大请求数
    reset_timedout_connection on; # 超时后重置连接释放资源

    # Gzip压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    gzip_min_length 1k;
    gzip_comp_level 5;
}

server 块应用例示

基础反向代理

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;  # 关键指令:指向后端服务器
        proxy_set_header Host $host;        # 传递原始域名
        proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;  # 传递协议(http/https)

        # 超时控制
        proxy_connect_timeout 60s;    # 连接后端超时时间
        proxy_read_timeout 600s;      # 读取响应超时
        proxy_send_timeout 600s;      # 发送请求超时

        # 缓冲区优化
        proxy_buffering on;
        proxy_buffer_size 4k;         # 响应头缓冲区
        proxy_buffers 8 32k;          # 响应内容缓冲区数量和大小
        proxy_busy_buffers_size 64k;  
    }
}

负载均衡策略

upstream backend_server {
    # 定义后端服务器(支持权重、健康检查)
    server 192.168.1.101:8080 weight=5 max_fails=3 fail_timeout=30s;
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 backup;  # 备份服务器

    # 负载均衡算法
    least_conn;                # 最少连接数(可选:ip_hash, hash, random)
    
    # 长连接优化
    keepalive 32;              # 连接池保持的空闲连接数
}

WebSocket 代理

SSL/TLS 安全配置

server {
    listen 443 ssl;
    server_name example.com;

    # 证书路径
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # 协议与加密套件
    ssl_protocols TLSv1.2 TLSv1.3;  # 禁用不安全协议
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    # 会话复用优化
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 安全响应头
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
}

高级配置

静态文件缓存

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 365d;                 # 缓存过期时间
    add_header Cache-Control "public, immutable";  # 强制缓存
    access_log off;                # 关闭日志记录
}

防盗链设置

location ~* \.(jpg|jpeg|png)$ {
    valid_referers none blocked example.com *.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

限流与 DDOS 限制

# 定义限流区域(10MB内存区,每秒10请求)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

location /api/ {
    limit_req zone=api_limit burst=20;  # 允许突发20请求
    limit_conn addr_zone 10;           # 单IP最大连接数
}

1

评论区