Nginx e / ou php5-fpm lembram-se do diretório-raiz ligado por links simbólicos

Minha raiz do site nginx aponta para um symlink. Se eu alterar o link simbólico (também conhecido como implantar uma nova versão do site), a versão antiga do script php continua aparecendo. Isso cheira a cache ou a um bug.

Primeiro, parecia que o Nginx estava armazenando em cache o diretório com link simbólico, mas recarregar / reiniciar / matar e iniciar o nginx não o corrigiu, então reiniciei o php5-fpm - isso corrigiu meu problema.

Mas eu não quero reiniciar o nginx e / ou php5-fpm após uma implementação - eu quero saber por que existe tal cache (ou bug), e por que ele não funcionou corretamente.

Informação útil:

SO: Ubuntu 13.10 (GNU / Linux 3.8.0-19-genérico x86_64)Nginx: via ppa: nginx / estávelPHP: via ppa: ondrej / php5 (php5-fpm)

Configuração do site Nginx:

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;
}

Configuração do servidor Nginx (em parte, o repouso é o padrão):

http {
    sendfile off;
    upstream php {
        server unix:/var/run/php5-fpm.sock;
    }
}

Árvore para / home / rob / sandbox:

├── deploy -> web2
├── web1
│   └── public
│       └── index.php (echo ONE)
└── web2
    └── public
        └── index.php (echo TWO)
pedido:http://localhost/index.phpresposta esperada: DOISresposta real: ONE

Parte da saída derealpath_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
)

Então isso significadeploy/public/index.php está devidamente ligado aweb2/public/index.php, certo? Bem, mesmo com os caminhos corretos na lista realpath_cache, o respone ainda é ONE.

Depois derm deploy eln -s web2 deploy O Nginx foi reiniciado, sem efeito. Reiniciando o php5-fpm depois disso, dá a resposta esperada de 'TWO'.

É bom saber que ao lado dos arquivos index.php, fiz alguns testes com arquivos .css e .js. Após remover e recriar o link simbólico de / para web1 e web2, o nginx responderá com o conteúdo correto dos arquivos.

O que eu perdi, o que eu não estou vendo?

questionAnswers(3)

yourAnswerToTheQuestion