打开h5以查看
主站 Nginx 配置(适配全部静态文件,缓存 2 小时)
核心规则说明
- 匹配路径:
/static/**全部转发到 B 服务器 IP/static/ - 不限文件类型:图片、js、css、字体、视频静态资源全部放行
- 浏览器缓存过期:2 小时
- Nginx 代理缓存有效期同步 2 小时
一、主站站点配置片段
nginx
server { listen 443 ssl; server_name www.yourdomain.com; ssl_certificate cert/xxx.crt; ssl_certificate_key cert/xxx.key; # 网站主业务 location / { root /www/main; index index.html index.htm; } # 所有 /static/ 下静态资源转发至B服务器 location /static/ { # 替换为你的B服务器IP proxy_pass http://B服务器IP/static/; # 代理请求头标准配置 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; # Nginx本地代理缓存 2小时 proxy_cache static_cache; proxy_cache_valid 200 304 2h; # 浏览器客户端缓存 2小时 expires 2h; add_header Cache-Control "public, max-age=7200"; # 超时控制 proxy_connect_timeout 8s; proxy_read_timeout 20s; # 防盗链(可选,防止别人盗资源) valid_referers none blocked server_names *.yourdomain.com yourdomain.com; if ($invalid_referer) { return 403; } } }二、nginx.conf http 块添加缓存定义
打开/etc/nginx/nginx.conf,在http {}内部加入:
nginx
http { # 其他原有配置... # 静态文件代理缓存目录,提前执行 mkdir -p /var/nginx/cache/static proxy_cache_path /var/nginx/cache/static levels=1:2 keys_zone=static_cache:100m inactive=4h max_size=20g; }参数解释:
keys_zone=static_cache:100m:分配 100M 内存存缓存索引inactive=4h:4 小时没人访问自动清理缓存文件(比 2h 长即可)max_size=20g:缓存磁盘最大占用 20G,可按需调整
三、B 服务器 Nginx 配置(提供全部静态文件)
B 无域名,仅 IP 访问,存放所有 /static 静态资源,限制仅主站可访问:
nginx
server { listen 80; server_name _; root /data/files; # static文件夹放在这个目录下 # 所有静态文件统一缓存2小时 location ~ .* { expires 2h; add_header Cache-Control "public, max-age=7200"; } # 白名单:只允许主站服务器IP请求,禁止公网直接访问B服务器 location / { allow 主站服务器IP; deny all; } }目录结构示例(B 服务器):
plaintext
/data/files/ └── static/ ├── js/main.js ├── css/style.css ├── img/1.png ├── font/font.ttf └── video/demo.mp4四、操作命令
- 创建缓存目录
bash
运行
mkdir -p /var/nginx/cache/static chmod 700 /var/nginx/cache/static- 校验配置并重载
bash
运行
nginx -t systemctl reload nginx五、路径转发逻辑示例
访问:https://www.yourdomain.com/static/js/app.js转发至 B 服务器:http://B服务器IP/static/js/app.js
补充说明
expires 2h= 浏览器缓存 2 小时,max-age=7200等价 7200 秒- 不限文件后缀,js/css/png/ttf/mp4 等全部支持
- 代理缓存 2 小时,2 小时内重复请求不会穿透到 B 服务器,减轻 B 服务器压力
如果是单独域名访问:
场景 1:adata.a.com 和 admin.a.com 共用同一台主站 Nginx(同一个 conf)
只需要在server_name把两个域名都写上,原有/park/static/代理配置完全不用改,自动生效。
nginx
server { listen 80; # 两个域名都匹配 server_name admin.a.com data.a.com; # 放在最顶部,不变 location ^~ /park/static/ { add_header X-Hit-ParkStatic "true"; proxy_pass http://192.168.120.44:8010/static/; 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_cache static_cache; proxy_cache_valid 200 304 2h; expires 2h; add_header Cache-Control "public, max-age=7200"; proxy_connect_timeout 8s; proxy_read_timeout 20s; } # 你的其他业务location location / { root D:/xxx; } }访问http://data.a.com/park/static/aa.txt会自动转发到 B 服务器,路径映射逻辑不变:/park/static/aa.txt→http://192.168.120.44:8010/static/aa.txt
场景 2:data.a.com 单独一台 Nginx、独立配置文件
新建一个站点 server 块,复制一模一样的/park/static/代理规则,只改server_name:
nginx
server { listen 80; server_name data.a.com; # 同样放在最顶部 location ^~ /park/static/ { add_header X-Hit-ParkStatic "true"; proxy_pass http://192.168.120.44:8010/static/; 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_cache static_cache; proxy_cache_valid 200 304 2h; expires 2h; add_header Cache-Control "public, max-age=7200"; proxy_connect_timeout 8s; proxy_read_timeout 20s; } # data域名自身业务根目录 location / { root D:/data-project; } }注意:独立配置文件的
http{}块里,依然要保留proxy_cache_path定义static_cache,否则启动报错。
额外:如果需要跨域(前端两个域名互相加载静态文件)
在/park/static/内部增加跨域头,允许两个域名访问资源:
nginx
location ^~ /park/static/ { # 允许两个域名跨域请求 add_header Access-Control-Allow-Origin "http://admin.a.com http://data.a.com"; add_header Access-Control-Allow-Methods GET,OPTIONS; if ($request_method = 'OPTIONS') { return 204; } # 下面原有代理配置不变 add_header X-Hit-ParkStatic "true"; proxy_pass http://192.168.120.44:8010/static/; ... }核心不变点
无论用哪个域名访问/park/static/xxx:
- 代理转发目标 B 服务器地址不变;
- 路径替换逻辑不变;
- 缓存、2 小时过期配置完全复用,不用改动。
打开h5以查看