My Computer · 2025/05/28 0

基于Nginx的多服务器静态资源反向代理缓存

  • 背景:主站部署在A服务器(常规国际线路),B服务器(三网优化线路)
  • 目标:利用B服务器(三网优化线路)作为反向代理缓存层,加速静态资源访问,降低主站负载

配置细节

主站A服务器,nginx添加一个server段,监听指定端口

server {
    listen 81; #监听端口
    server_name  localhost;

    root /www/wwwroot/xxx1.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~* \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-cgi-74.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env) {
        return 404;
    }

    access_log  /www/wwwlogs/static_by_ip.log;
    error_log   /www/wwwlogs/static_by_ip.error.log;
}

在主站核心server段添加一个location

    # 静态资源缓存到B服务器
    location ~* \.(css|js|png|jpe?g|gif|ico|woff2?|ttf|svg|mp4|webm)$ {
        proxy_pass http://14.11.11.22:81; #b服务器IP和端口
    
        proxy_set_header Host xxx1.com; #主站域名
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        proxy_connect_timeout 10s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    
        add_header X-From-Cache-Layer US;
    }

B服务器 - 新建站点,域名随意,配置中填入:

proxy_cache_path /www/wwwroot/xxx1_proxy levels=1:2 keys_zone=xxx1_proxy_cache:100m max_size=5g inactive=7d use_temp_path=off;

server {
    listen 81;  # 监听内部端口
    server_name localhost;

    location ~* \.(css|js|png|jpe?g|gif|ico|woff2?|ttf|svg|mp4|webm)$ {
            proxy_pass http://8.8.9.9:81; #主站IP和端口
    
            proxy_set_header Host xxx1.com; #主站域名
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
            proxy_cache xxx1_proxy_cache;
            proxy_cache_valid 200 302 304 7d; # 正常内容缓存 7 天
            proxy_cache_use_stale error timeout updating;
            proxy_ignore_headers Cache-Control Set-Cookie Expires;
    
            proxy_ssl_server_name on;
            proxy_redirect off;
    
            add_header X-Cache-Status $upstream_cache_status;
        }
    }

最后两台服务器开放81端口,设置B服务器防火墙限制仅 A服务器 可访问其 81端口(避免被扫)