nginx服务配置

nginx服务配置

# 定义缓存路径和区域
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g 
                 inactive=60m use_temp_path=off;

# 定义上游服务器组(负载均衡)
upstream backend_servers {
    # 使用IP哈希实现会话保持
    ip_hash;
    
    # 后端服务器,weight表示权重
    server 192.168.1.101:8080 weight=3;  # 这台服务器处理更多请求
    server 192.168.1.102:8080 weight=2;
    server 192.168.1.103:8080 weight=1;  # 这台服务器处理较少请求
    server 192.168.1.104:8080 backup;    # 备份服务器,只有当其他都不可用时才启用
}

server {
    listen 80;
    server_name example.com;
    
    # 隐藏Nginx版本信息
    server_tokens off;
    
    # 静态文件服务 - 直接由Nginx处理,不代理到后端
    location /static/ {
        alias /var/www/static/;
        expires 30d;  # 客户端缓存30天
        access_log off;
    }
    
    # API接口 - 启用缓存
    location /api/ {
        # 启用缓存
        proxy_cache my_cache;
        
        # 缓存规则:200响应码缓存10分钟,404缓存1分钟
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        
        # 只有GET和HEAD请求被缓存
        proxy_cache_methods GET HEAD;
        
        # 当多个请求同时到达时,只让一个请求去后端,其他等待结果
        proxy_cache_lock on;
        proxy_cache_lock_timeout 5s;
        
        # 跳过某些请求的缓存(如带认证头的)
        proxy_cache_bypass $http_authorization;
        
        # 设置缓存键(可根据业务需求定制)
        proxy_cache_key "$scheme$request_method$host$request_uri$http_authorization";
        
        # 代理到后端服务器组
        proxy_pass http://backend_servers;
        
        # 隐藏真实服务器信息 - 设置代理头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        
        # 超时设置
        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
        
        # 启用压缩
        gzip on;
        gzip_types application/json;
    }
    
    # 动态内容 - 不缓存
    location / {
        proxy_pass http://backend_servers;
        
        # 隐藏真实服务器信息
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 超时设置
        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    }
    
    # 健康检查端点(可选)
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;    # 只允许本地访问
        allow 192.168.1.0/24; # 或者内网IP段
        deny all;
    }
}

🔧 配置说明

1. 负载均衡效果

  • 请求到达 example.com 时,Nginx 会按照 3:2:1 的权重比例分发到三台后端服务器
  • 使用 ip_hash 确保同一用户的请求总是发往同一台后端服务器(会话保持)
  • 当 101、102、103 都宕机时,104 备份服务器会自动启用

2. 隐藏真实服务器

  • 后端服务器只看到来自 Nginx 的请求,不知道真实客户端 IP
  • 通过 proxy_set_header 将客户端真实 IP 传递给后端
  • server_tokens off 隐藏 Nginx 版本信息

3. 缓存策略

  • 静态文件:直接由 Nginx 服务,不经过后端
  • API 接口:缓存 GET 请求的响应,减少后端压力
  • 动态内容:不缓存,直接代理到后端

🚀 部署步骤

创建缓存目录

sudo mkdir -p /var/cache/nginx
sudo chown -R nginx:nginx /var/cache/nginx

检查配置语法

nginx -t

重载配置

nginx -s reload

📊 验证配置

  1. 检查负载均衡
# 多次访问观察请求分发
curl http://example.com/api/test

检查缓存
查看缓存目录是否生成文件:

ls -la /var/cache/nginx/

检查状态

curl http://example.com/nginx_status

这样的配置能够有效提升网站性能、增强安全性,并提高系统的可用性。根据你的具体业务需求,可以调整缓存时间、负载均衡策略等参数。

posted @ 2025-11-06 17:42  guixiang  阅读(4)  评论(0)    收藏  举报