Nginx核心配置详解:从HTTP服务到负载均衡

作为现代Web架构的核心组件,Nginx的配置灵活性是其强大功能的关键。本文将深入解析Nginx的核心配置模块,帮助您构建高性能的Web服务架构。

HTTP服务器配置

server块基础

server块定义了虚拟服务器的基本参数:

server {
    listen 80;                  # 监听端口
    server_name example.com;    # 服务器名称(支持通配符和正则)
    root /var/www/html;         # 默认根目录
    
    # 默认location块
    location / {
        index index.html;
    }
}

关键参数说明

  • listen:可指定IP和端口(如192.168.1.1:443
  • server_name:支持多域名(空格分隔)和通配符(*.example.com

location路由匹配

location块定义了URL路径的处理规则:

location /images/ {
    # 前缀匹配(区分大小写)
    alias /data/static/;  # 注意与root的区别
}

location ~* \.(jpg|png)$ {
    # 正则匹配(不区分大小写)
    root /data/media;
    expires 30d;  # 缓存控制
}

location = /exact {
    # 精确匹配
    return 200 'Exact match';
}

匹配优先级

  1. 精确匹配(=
  2. 前缀匹配(^~
  3. 正则匹配(~~*
  4. 普通前缀匹配

实践建议

  • 静态资源使用alias避免路径拼接问题
  • 高频访问路径优先使用前缀匹配
  • 复杂路由规则应添加注释说明业务逻辑

反向代理配置

基础代理设置

location /api/ {
    proxy_pass http://backend_server/;  # 注意结尾的/
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

关键指令

  • proxy_pass:代理目标URL(结尾有无/影响路径处理)
  • proxy_set_header:必须显式传递Host等关键头信息

健康检查配置(需第三方模块)

upstream backend {
    server 192.168.1.2:8080;
    server 192.168.1.3:8080;
    
    check interval=3000 rise=2 fall=3 timeout=1000;
    check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

实践建议

  • 生产环境必须实现健康检查
  • 超时时间(timeout)应大于后端平均响应时间
  • 使用proxy_next_upstream处理故障转移

负载均衡策略

upstream定义

upstream app_servers {
    least_conn;            # 最少连接算法
    
    server 10.0.0.1:8080 weight=3;  # 加权轮询
    server 10.0.0.2:8080;
    server 10.0.0.3:8080 backup;    # 备用服务器
}

负载均衡算法

  • 轮询(默认):均匀分配请求
  • 加权轮询:根据权重分配
  • IP Hash:相同客户端固定后端
  • 最少连接:优先选择当前连接数少的后端

图1

实践建议

  • 有状态服务使用IP Hash保持会话
  • 性能差异大的后端使用加权轮询
  • 始终配置备份服务器(backup)

日志管理

访问日志定制

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
                
access_log /var/log/nginx/access.log main buffer=32k flush=5m;

常用变量

  • $request_time:请求处理时间
  • $upstream_response_time:后端响应时间
  • $http_x_forwarded_for:客户端原始IP

实践建议

  • 生产环境日志应包含响应时间字段
  • 使用缓冲写入减少磁盘IO
  • 定期日志轮转(logrotate)

配置最佳实践

  1. 模块化配置

    # 主配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
  2. 安全基线

    server_tokens off;  # 隐藏版本信息
    client_max_body_size 10m;  # 限制上传大小
  3. 性能调优

    events {
     worker_connections 1024;
     multi_accept on;
    }
    
    http {
     sendfile on;
     tcp_nopush on;
     keepalive_timeout 65;
    }

通过合理组合这些配置模块,您可以构建出适应各种场景的高性能Nginx服务架构。建议在修改关键配置前使用nginx -t测试语法,并通过nginx -s reload平滑重载配置。

添加新评论