打开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 小时过期配置完全复用,不用改动。