You need to enable JavaScript to run this app. 如何解决NGINX反向代理环境下符号链接symlink被缓存的问题
优惠活动
大模型
产品
解决方案
定价
更多

如何解决NGINX反向代理环境下符号链接symlink被缓存的问题

问题本质

你之前在FastCGI架构下的符号链接缓存是Nginx读取本地文件时的open_file_cache机制导致,用$realpath_root可以强制解析符号链接的真实路径。切换到反向代理架构后,你使用的是Laravel Octane常驻内存服务,符号链接不生效的核心原因大部分情况下不是Nginx反向代理的缓存,而是Octane启动后会将代码一次性加载到内存中,修改符号链接不会更新已加载的代码。

可行解决方案

1. 处理Nginx静态文件缓存(仅针对静态资源不更新的场景)

如果你的站点静态资源存放于符号链接指向的目录,且Nginx配置了静态资源直接返回,需要关闭静态资源路径的符号链接缓存:

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    root /你的站点根目录/current/public;
    # 关闭Nginx的文件缓存,避免符号链接指向的路径被缓存
    open_file_cache off;
    try_files $uri =404;
}

如果你的Nginx全局开启了open_file_cache,也可以针对站点根目录配置强制解析真实路径:

server {
    set $root_path /你的站点根目录/current/public;
    root $realpath_root;
}

2. 平滑重载Octane服务(核心解决方案,针对PHP代码不更新的场景)

Octane是常驻内存服务,替换符号链接后需要平滑重启工作进程才能加载新代码,不会导致服务中断:
部署步骤调整为:

  • 拉取最新代码到新目录
  • 将current符号链接指向新目录
  • 执行平滑重载命令:php artisan octane:reload

所有工作进程会在处理完当前请求后退出,主进程会启动新的工作进程加载新目录的代码,完全实现零停机部署。

3. 处理Nginx反向代理缓存(仅针对开启了proxy_cache的场景)

如果你在Nginx中配置了proxy_cache缓存动态请求,可以在部署完成后清理对应缓存目录的文件,或者调整proxy_cache_key加入版本标识避免跨版本缓存。


内容的提问来源于stack exchange,提问作者Andrea Marco Sartori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 00:15:03