Nginx vhost缓存符号链接

时间:2015-04-23 19:51:51

标签: caching nginx deployment capistrano

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

Capistrano使用我的应用程序的最新版本和我当前的文件夹符号链接创建一个新版本文件夹到该版本。这很好,它确实链接了最新版本。

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

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

文件夹结构:

 current (symlink new release)
 releases
     new release
     old release

VHOST:

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

1 个答案:

答案 0 :(得分:4)

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

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

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

重要的部分是$realpath_root

所以你的location ~ \.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个指令。