caching - Nginx 虚拟主机缓存符号链接(symbolic link)

标签 caching nginx deployment capistrano

我在部署应用程序时遇到问题。我有一个 PHP 应用程序,并使用 Capistrano 将应用程序部署到我的服务器。

Capistrano 使用我的应用程序的最新版本以及指向该版本的当前文件夹符号链接(symbolic link)创建了一个新的版本文件夹。效果很好,它确实链接了最新版本。

但是当我访问网站的 URL 时,没有任何变化,即使符号链接(symbolic link)链接到当前文件夹(最新版本),文件也来自旧版本文件夹。

Nginx 会缓存我的所有文件吗?或者它是否缓存我的符号链接(symbolic link),我不知道。

文件夹结构:

 current (symlink new release)
 releases
     new release
     old release

虚拟主机:

server {
    listen 443;
    server_name servname.com;
    root /apps/application/production/current/public; 
}

最佳答案

问题出在真实路径缓存级别。它使用符号链接(symbolic link)路径缓存 PHP 文件。您需要做的是提供真实的文档路径。

您需要在配置文件中添加这两行

fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

重要的部分是$realpath_root

来自文档:

$realpath_root
an absolute pathname corresponding to the root or alias directive’s value for the current request, with all symbolic links resolved to real paths

含义 $realpath_root 将所有符号链接(symbolic link)解析到其真实路径。这是重要的部分。

所以你的位置 ~\.php$ 将变成

location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }

确保include fastcgi_params(如果存在)不会覆盖您刚刚添加的 2 个指令。

关于caching - Nginx 虚拟主机缓存符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833028/

相关文章:

ruby-on-rails - Rails 4.2 片段缓存不起作用

javascript - 如何使从书签加载的JS文件的缓存失效?

asp.net - 如何在 .ashx 处理程序上使用输出缓存

nginx - 使用 symfony3 提供远程静态文件

nginx - 在 NGINX 中配置子域

nginx - 增加504超时错误

c# - 如何获取 HttpRuntime.Cache 中对象的大小?

Azure云服务部署

reactjs - 在 "exportPathMap"中找不到 "next.config.js"。从 "./pages"生成 map

java - 将 Web 应用程序部署到 Heroku