pasta de redirecionamento Nginx para script PHP

1

Eu uso o seguinte bloco de configuração

location ~* \.(apng)$ 
{
 try_files $uri $uri/ /getbait.php$args;
 add_header  Cache-Control public;
 add_header Cache-Control must-revalidate;
 expires 7d;
}

para garantir que todos os pedidos de imagens APNG para o meu servidor sejam processados por um script PHP que os carregue primeiro no Imagick, coloque uma marca d'água na imagem e, em seguida, produza o resultado.

Isso funciona muito bem. No entanto, eu sei que tem um requisito ligeiramente diferente. O bloco de configuração acima como está é pegar tudo. Preciso modificá-lo para que a marca d'água colocada seja diferente, dependendo do caminho exato da solicitação. Então, por exemplo

https://example.com/watermark/example.apng 

cuspia uma imagem com uma marca d'água enquanto

https://example.com/sample/example.apng

cuspia uma imagem com uma marca d'água diferente. Eu sei que preciso modificar o location ~* \ bit da minha diretiva acima e especificar caminhos APNG curinga para duas pastas diferentes com dois blocos de controle diferentes. No entanto, meu conhecimento da configuração do Nginx e do RegEx relevante simplesmente não está à altura desse desafio. Espero que alguém aqui possa me ajudar.

    
por DroidOS 11.01.2018 / 08:48

2 respostas

0

Eu ia deletar essa pergunta, mas pensei em deixá-la aqui com a solução que acabei encontrando para o benefício de outros que procuravam fazer coisas semelhantes

Aqui está o que eventualmente funcionou para mim

location ~* ^/path/to/dirA/.+\.(apng)$
{
 add_header Access-Control-Allow-Origin "*";
 add_header  Cache-Control public;
 add_header Cache-Control must-revalidate;
 expires 7d;
 try_files $uri $uri/ /phpscriptA.php$args;    
}

Devo explicar que no meu contexto as imagens aqui são acessadas apenas uma vez desde que as imagens reais são entregues por um CDN. A única vez que esta URL é acessada diretamente é quando o CDN faz sua origem puxar

    
por 11.01.2018 / 13:46
0

A solução simples para isso seria apenas olhar para $_SERVER['REQUEST_URI'] no script PHP.

Além disso, se você ainda não estiver, e isso gerar algum tipo de tráfego, seria interessante armazenar em cache as imagens geradas em algum lugar. Idealmente no caminho correto para que a diretiva try_files os encontre sem ter que executar nenhum código PHP se a imagem já tiver sido gerada.

Editar: como exemplo -

A configuração existente corresponde a qualquer arquivo .apng e procura pelo arquivo, ou envia para um script php.

location ~* \.(apng)$ 
{
 try_files $uri $uri/ /getbait.php$args;
 add_header  Cache-Control public;
 add_header Cache-Control must-revalidate;
 expires 7d;
}

Em getbait.php você poderia fazer algo como o seguinte:

// REQUEST_URI should contain something like /path/to/watermark/imagename.apng

if( preg_match('/\/([^\/]+)\/([^\.]+.apng)$/', $_SERVER['REQUEST_URI'], $imageData) ){

    // $imageData[1] should now be watermark
    // $imageData[2] should be imagename.apng

    // At this point you can use a switch statement like below,
    // or an if statement, look up the watermark in some database,
    // or even just use $imageData[1] directly as the filename of the
    // watermark to load - if you're using an image overlay. (that way adding 
    // new watermarks is just a case of uploading the new watermark overlay 
    // image)

    switch($imageData[1]){
        case 'watermark1':
            // code
            break;
        case 'watermark2':
            // code
            break;
    }
}
    
por 11.01.2018 / 11:34