Nginx 多网卡专用缓存路径本质是通过IP绑定、缓存区分离和存储介质定向挂载实现隔离,而非识别网卡;需在http块定义proxy_cache_path,server块按监听IP绑定对应缓存区,并确保路径挂载、权限与网络策略匹配。
在多网卡服务器上为 Nginx 静态服务配置专用缓存路径,核心不是“按网卡区分缓存”,而是按流量路径、用途或存储介质隔离缓存空间——因为 Nginx 的 proxy_cache_path 本身不识别网卡,但你可以结合系统挂载、目录权限与网络策略,实现物理/逻辑层面的专有缓存路径分配。
下面分三类实用场景说明怎么做:
适用于:某块网卡(如 ens3f1)直连高性能 NVMe 存储,你希望静态资源缓存独占该盘,避免与其他服务争抢 IO。
将磁盘挂载到独立路径(例如 /mnt/cache-ens3f1),并确保该路径由该网卡所属业务网段专属访问:
# 查看网卡对应 PCI 设备及挂载点关联(可选验证)lspci | grep -i nvmelsblk -f | grep /mnt/cache-ens3f1
在 nginx.conf 的 http 块中定义专属缓存区:
proxy_cache_path /mnt/cache-ens3f1/nginx_static_cachelevels=1:2keys_zone=static_cache_ens3f1:500minactive=7dmax_size=200guse_temp_path=off;
在对应 server 块中,仅对该网卡监听的 listen 指令启用该缓存(例如只监听 192.168.10.100:80,该 IP 绑定在 ens3f1 上):
server {listen 192.168.10.100:80;server_name static.example.com;location /static/ {proxy_cache static_cache_ens3f1;proxy_cache_valid 200 302 1h;proxy_cache_valid 404 1m;proxy_pass http://backend_static;# 其他 proxy_* 参数...}}
适用于:eth0 对外提供 CDN 回源静态服务,eth1 对内提供管理后台静态资源,二者缓存互不干扰。
创建两个独立缓存路径(可分别挂载在不同磁盘或子目录):
proxy_cache_path /var/cache/nginx/cdn_cachekeys_zone=cdn_cache:200m inactive=30m;proxy_cache_path /var/cache/nginx/internal_cache keys_zone=int_cache:100m inactive=10m;
在两个 server 块中分别绑定对应网卡 IP 和缓存区:
server {listen 203.0.113.5:80; # 公网网卡 eth0location /static/ {proxy_cache cdn_cache;# ...}}server {listen 10.10.20.5:80;# 内网网卡 eth1location /admin-static/ {proxy_cache int_cache;# ...}}
适用于:无额外磁盘,但需保障某网卡流量的缓存性能(如低延迟要求),可用内存盘 + 网卡命名空间模拟专属路径。
mkdir -p /var/cache/nginx/ens3f1_memmount -t tmpfs -o size=4g,mode=0755 tmpfs /var/cache/nginx/ens3f1_mem
proxy_cache_path /var/cache/nginx/ens3f1_mem levels=1:2 keys_zone=mem_cache_ens3f1:100m inactive=1h max_size=3g;
tmpfs 缓存重启即失,适合热数据;若需持久,请用 ext4+noatime 挂载的 SSD 盘。关键提醒:
$server_addr 或 $remote_addr 动态切换 proxy_cache_path,Nginx 不支持运行时路径变量;proxy_cache 的 key 是 $scheme$proxy_host$uri$is_args$args,默认已天然隔离不同 server 或 location;open_file_cache(文件元数据缓存),它作用于本地文件系统,与网卡无关,但建议同样为高频静态目录单独配置,例如:location /static/ {alias /data/static/;open_file_cache max=50000 inactive=60s;open_file_cache_valid 120s;open_file_cache_min_uses 3;}
本质上,多网卡环境下的“专用缓存路径”是通过IP 绑定 + 缓存区分离 + 存储介质定向挂载三层控制实现的,而非 Nginx 自身识别网卡。只要路径隔离、权限明确、IO 路径可控,就达到了专用目标。