插件窝 干货文章 Nginx常见配置实例分析

Nginx常见配置实例分析

配置 Nginx server location 236    来源:    2025-04-21

以下是一些Nginx常见配置实例及其分析,涵盖基础配置、优化场景和典型用例:


一、基础配置示例

1. 静态文件服务

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    location / {
        index index.html;
        try_files $uri $uri/ =404;
    }

    location ~* \.(jpg|png|css|js)$ {
        expires 30d;
        access_log off;
    }
}

分析: - 通过root指令指定静态文件根目录 - try_files实现优雅的回退机制(优先匹配URI,最后返回404) - 对静态资源(图片/CSS/JS)设置缓存头并关闭日志


2. 反向代理配置

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

关键点: - proxy_pass将请求转发到本地3000端口的应用服务 - 通过proxy_set_header传递原始主机头和客户端IP


二、进阶配置场景

1. 负载均衡

upstream backend {
    server 10.0.0.1:8080 weight=3;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080 backup;
}

server {
    location / {
        proxy_pass http://backend;
        health_check interval=5s;
    }
}

策略说明: - 主服务器按3:1比例分配请求 - backup参数指定备用服务器 - 主动健康检查(需Nginx Plus)


2. HTTPS安全配置

server {
    listen 443 ssl http2;
    server_name secure.example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # HSTS
    add_header Strict-Transport-Security "max-age=31536000" always;
}

安全优化: - 禁用老旧TLS协议 - 使用强密码套件 - 启用HTTP/2 - 配置HSTS强制HTTPS


三、性能优化配置

1. 文件传输优化

server {
    # 启用零拷贝技术
    sendfile on;

    # 大文件传输优化
    aio on;
    directio 4m;

    # 缓冲区设置
    client_body_buffer_size 128k;
    client_max_body_size 20m;
}

2. 连接优化

http {
    keepalive_timeout 65;
    keepalive_requests 100;

    # 文件描述符缓存
    open_file_cache max=2000 inactive=20s;
    open_file_cache_valid 60s;
}

四、典型问题解决方案

1. 跨域配置

location /api/ {
    add_header 'Access-Control-Allow-Origin' '$http_origin';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Content-Type';

    # 预检请求处理
    if ($request_method = 'OPTIONS') {
        return 204;
    }
}

2. 防盗链配置

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

3. 路径重写

location /blog {
    rewrite ^/blog/(.*)$ /newpath/$1 permanent;
}

五、调试技巧

  1. 日志分析

    http {
       log_format main '$remote_addr - $request_time - "$request"';
       access_log /var/log/nginx/access.log main buffer=32k;
       error_log /var/log/nginx/error.log warn;
    }
    
  2. 变量调试

    location /debug {
       return 200 "$host\n$uri\n$args";
    }
    

六、注意事项

  1. 每次修改配置后需测试语法: bash nginx -t
  2. 灰度生效配置: bash nginx -s reload
  3. 推荐使用include指令模块化配置(如分离SSL配置、公共头配置等)

需要针对特定场景的详细配置方案,可以提供更具体的需求场景。