Nginx 和/或 php5-fpm 记住符号链接的根目录
我的nginx网站根指向符号链接。如果我更改符号链接(即部署新版本的网站),旧版本的php脚本会不断出现。这闻起来像缓存或错误。
首先,看起来Nginx正在缓存符号链接的dir,但是重新加载/重新启动/杀死并启动nginx并没有修复它,所以我重新启动了php5-fpm - 这解决了我的问题。
但是我不想在部署后重新启动nginx和/或php5-fpm - 我想知道为什么会有这样的缓存(或错误),以及为什么它不能正常工作。
实用信息:
- OS: Ubuntu 13.10 (GNU/Linux 3.8.0-19-generic x86_64)
- Nginx: via ppa:nginx/stable
- PHP: via ppa:ondrej/php5 (php5-fpm)
Nginx site config:
root /home/rob/sandbox/deploy/public/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php;
}
Nginx服务器配置(部分,其余是默认的):
http {
sendfile off;
upstream php {
server unix:/var/run/php5-fpm.sock;
}
}
树 /home/rob/sandbox:
├── deploy -> web2
├── web1
│ └── public
│ └── index.php (echo ONE)
└── web2
└── public
└── index.php (echo TWO)
- 请求:
http://localhost/index.php
- 预期响应:两个
- 实际响应:一
部分输出来自realpath_cache_get()
[/home/rob/sandbox/deploy/public/index.php] => Array (
[key] => 1.4538996210143E+19
[is_dir] =>
[realpath] => /home/rob/sandbox/web2/public/index.php
[expires] => 1383730041
)
所以这个意思是正确链接到,对吧?好吧,即使realpath_cache列表中有正确的路径,respone仍然是ONE。deploy/public/index.php
web2/public/index.php
和Nginx重新启动后,没有效果。在此之后重新启动php5-fpm会得到“TWO”的预期响应。rm deploy
ln -s web2 deploy
很高兴知道,除了索引.php文件之外,我还对.css和.js文件进行了一些测试。在删除并重新创建来自/到web1和web2的符号链接后,nginx将使用文件的正确内容进行响应。
我错过了什么,我没有看到什么?