Mapeamento de URLs antigos para novos com arquivo externo - configuração inválida

2

Estou movendo um site antigo para um novo host baseado em nginx. Para preservar o URL (que mudou completamente), tenho um arquivo que lista o mapeamento. Quero usá-lo com o módulo de mapas .

Dentro de /etc/nginx/nginx.conf http{ ... } , refiro-me ao PERL e à função minúscula:

#Include PERL and have a function for lowercasing the incoming URL
perl_modules perl/lib;

    # function to lowercase incoming strings like the URL
    perl_set $uri_lowercase 'sub {
        my $r = shift;
        my $uri = $r->uri;
        $uri = lc($uri);
        return $uri;
    }';

A configuração do meu site, que está no arquivo /etc/nginx/sites-enabled/notessensei (Thx Alexey para mostrar isso):

server {
    listen www.notessensei.com:80;
    root /home/stw/www;
    index index.html;
    server_name www.notessensei.com notessensei.com;

    location / {
        map $uri_lowercase $new {
            include /home/stw/www/blognginx.map;
        }

        if ($new) {
                rewrite ^ $new redirect;
        }
    }

    error_page 404 /blog/404.html;

}

O arquivo de mapeamento blognginx.map tem esta aparência:

/blog/d6plinks/shwl-6bv35s /blog/2005/04/garbage-in-.html;
/blog/d6plinks/shwl-6c6ggp /blog/2005/05/just-me.html;
/blog/d6plinks/shwl-6c6gh4 /blog/2005/05/it-is-quotmake-your-own-caption-quot-time.html;
/blog/d6plinks/shwl-6c997j /blog/2005/05/big-business-wwjd.html;
/blog/d6plinks/shwl-6ca5qb /blog/2005/05/domino-on-solaris-anyone.html;
/blog/d6plinks/shwl-6ce65j /blog/2005/05/going-places-vietnam.html;
/blog/d6plinks/shwl-6ce6c9 /blog/2006/02/umsys-as-old-as-unix-sort-of.html;

por cerca de 1300 linhas. Quando faço um service nginx configtest , obtenho uma falha . Quando não uso a instrução include , obtenho um OK. Agora eu tenho 2 perguntas:

  1. Existe uma maneira de obter um erro mais detalhado, um que me diga o que está errado e onde ?
  2. O que está errado? Preciso alterar o conteúdo do arquivo de inclusão? Preciso mover a seção?

A ajuda é muito apreciada.

    
por stwissel 29.05.2014 / 11:50

2 respostas

3
A diretiva

map deve ser filha imediata http block.

syntax: map string $variable { ... }

default: —

context: http

No seu caso, você deve colocá-lo ao lado de server block, porque o arquivo de configuração personalizado está incluído dentro do http block no nginx.conf.

map $uri_lowercase $new {
  include /home/stw/www/blognginx.map;
}

server {
  ...
}
    
por 29.05.2014 / 12:13
3

Eu percebi isso, thx para os ponteiros de Alexey. Houve um problema de 4 vezes:

  • a declaração do mapa não estava no lugar certo, Alexey apontou isso
  • o arquivo tinha alguns erros dentro (falta de espaço em algumas linhas)
  • o tamanho do mapa era muito pequeno (veja a solução abaixo)
  • o service nginx configtest informa menos que nginx -t , mais uma vez Alexey me indicou

Agora, meu /etc/nginx/nginx.conf tem duas linhas adicionais na seção http {} :

## Increase bucket for big redirects
map_hash_bucket_size 256;
map_hash_max_size 4092;

e o arquivo /etc/nginx/sites-enabled/notessensei tem esta aparência:

map $uri_lowercase $new {
    include /home/stw/www/blognginx.map;
}

server {
    listen www.notessensei.com:80;
    root /home/stw/www;
    index index.html index.htm;
    server_name www.notessensei.com notessensei.com;

    location / {
        if ($new) {
                return 301 $new;
        }
    }

    error_page 404 /blog/404.html;

}

Se você quiser vê-lo em ação, escolha qualquer entrada de blog de wissel.net e aplique a parte uri a notessensei.com - funciona como um encanto com > 1200 entradas.

    
por 29.05.2014 / 18:37

Tags