nginx caminho absoluto try_files

3

Sou novo no nginx, o que eu gostaria de fazer é pegar todos os pedidos de imagens (* .jpg | png | gif) e encaminhá-los para um script php fora do escopo do root.

Meu script atual de trabalho é o seguinte:

server {

   index index.php;

   # PHP-FPM
   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
   }

   # Images handler
   root /var/www/images-handler;
   location ~* \.(gif|jpg|png) {
      rewrite ^ /img.php last;
   }

}

O problema é que tenho que alterar a variável root para /var/www/website-contents . Como website-contents e images-handler não têm o mesmo diretório pai, adiciono uma variável root ao meu segmento location da seguinte forma:

root /var/www/website-contents;

location ~* \.(gif|jpg|png) {
   root /var/www/images-handler;
   rewrite ^ /img.php last;
}

Mas isso não funciona. Todas as imagens retornam uma resposta 404.

Eu tenho para criar /var/www da raiz e adicionar website-contents e images-handler em seus próprios location segmentos, / e ~* \.(gif|jpg|png) respectivamente? Devo criar um link simbólico para /var/www/images-handler dentro de /var/www/website-contents ?

Existe uma solução melhor para tudo isso?

Muito obrigado.

    
por Julien 10.12.2015 / 17:24

1 resposta

0

Atualmente, todos os scripts php são executados pelo seu bloco location ~ \.php$ , com o root que você forneceu. Se você quiser executar um script php com uma raiz diferente, você precisa substituir esse local. Existem várias maneiras de conseguir isso. Apenas para um script php, um location = seria mais simples. Por exemplo:

root /var/www/website-contents;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

location ~* \.(gif|jpg|png) {
    rewrite ^ /img.php last;
}

location = /img.php {
    root /var/www/images-handler;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}
    
por 10.12.2015 / 17:33

Tags