我在部署应用程序时遇到问题。我有一个 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/