Nginx reescreve urls sem redirecionamento

3

Eu usei reescrever diretivas abaixo em nginx para reescrever urls de arquivos estáticos para o servidor CDN externo.

rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ http://cdn.domain.com/$1_$2 last;

Funciona, mas redireciona o URL automaticamente nos navegadores.

Como posso fazer a reescrita acima sem redirecionamentos?

    
por jack 07.02.2010 / 07:29

3 respostas

1

Você precisa alterar os links dentro de seu aplicativo para apontar para o CDN para inclusões estáticas.

Quando você reescreve para um local http, não há nada que o nginx possa fazer além de redirecionar o navegador (já que o CDN está fora do nginx e o navegador precisa obter os arquivos do CDN). Você teria o mesmo problema com o Apache ou qualquer outro gravador de URL, pois o CDN não é um local "interno" para o servidor da Web.

Uma opção pode ser o módulo de subscrição nginx, que pode substituir o conteúdo à medida que é entregue. Mas isso não lida com expressões regulares e atrasaria cada solicitação. É melhor apenas alterar o HTML do seu aplicativo para fazer referência aos URLs do CDN diretamente.

    
por 18.02.2010 / 02:31
2

O nginx faz distinção entre maiúsculas e minúsculas (recurso ou bug), use HTTP: // em vez de http: //, por exemplo:

rewrite ^/static/(css|images|js)/([a-z_\-\.]+)$ HTTP://cdn.domain.com/$1_$2 last;

mas o pedido será enviado para o servidor proxy_pass, e só funciona se o servidor em proxy_pass também for servidor proxy da web, que entende

GET HTTP://cdn.domain.com/ HTTP/1.0
    
por 28.11.2010 / 01:06
0

Se você quiser ocultar a URL do servidor CDN externo, você deve encontrar o CDN com suporte a aliases. Em seguida, aponte seu subdomínio (cdn.yourdomain.com) para CDN.

    
por 07.02.2010 / 11:13

Tags