2015-04-23 82 views
1

我在部署我的應用程序時遇到了問題。我有一個PHP應用程序,並將我的應用程序與Capistrano部署到我的服務器上。Nginx vhost緩存符號鏈接

Capistrano使我的應用程序的最新版本和我當前的文件夾符號鏈接到該版本的新版本文件夾。這工作正常,它確實鏈接了最新版本。

但是,當我去我的網站的URL沒有任何變化,即使符號鏈接鏈接到當前文件夾(最新版本),文件來自舊版本文件夾。

Nginx是否緩存我的所有文件?或者它緩存我的符號鏈接,我不知道。

文件夾結構:

current (symlink new release) 
releases 
    new release 
    old release 

虛擬主機:

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

我有同樣的問題,也試圖找到解決方案。我發現的解決方法是,如果您在nginx文件夾中創建並刪除文件,它會強制nginx指向新的符號鏈接,但我不喜歡這種方法。 – cleanunicorn

回答

2

的問題是在真實路徑緩存級別。它使用符號鏈接路徑緩存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個指令。

+1

爲了記錄,雖然解決方案是正確的,但這裏的問題不是操作碼緩存,而是[實際路徑緩存](http://php.net/manual/en/ini.core.php#ini.realpath-cache -尺寸)。 – Mahn

+0

我已更新我的回覆並刪除了Opcache參考。 – cleanunicorn