Назад | Перейти на главную страницу

Сопоставление старых и новых URL-адресов с помощью внешнего файла - неверная конфигурация

Я перемещаю старый веб-сайт на новый хост на базе nginx. Чтобы сохранить URL-адрес (который полностью изменился), у меня есть файл со списком сопоставлений. Я хочу использовать это с модуль карты.

Внутри /etc/nginx/nginx.conf http{ ... } Я имею в виду PERL и функцию нижнего регистра:

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

Конфигурация моего сайта, которая находится в файле /etc/nginx/sites-enabled/notessensei (Спасибо, Алексей, чтобы указать на это) выглядит так:

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;

}

Файл сопоставления blognginx.map выглядит так:

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

около 1300 линий. Когда я делаю service nginx configtest Я получаю потерпеть поражение. Когда я не использую include заявление я получаю ОК. Теперь у меня 2 вопроса:

  1. Есть ли способ получить более подробную ошибку, которая говорит мне какие неправильно и где?
  2. Что случилось? Мне нужно изменить содержимое включаемого файла? Мне нужно переместить раздел?

Помощь очень ценится.

Разобрался, спасибо указателям Алексея. Возникла 4-х кратная проблема:

  • заявление на карте было не в том месте, Алексей указал на это
  • внутри файла были ошибки (пропущено место в нескольких строках)
  • размер карты был слишком мал (см. решение ниже)
  • в service nginx configtest говорит меньше, чем nginx -t, опять Алексей указал мне туда

Теперь мой /etc/nginx/nginx.conf имеет 2 дополнительные строки в http {} раздел:

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

и /etc/nginx/sites-enabled/notessensei файл выглядит так:

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;

}

Если вы хотите увидеть это в действии, выберите любую запись в блоге из wissel.net и примените часть uri к notessensei.com - работает как шарм с> 1200 записями.

map директива должна быть непосредственным потомком http блок.

синтаксис: строка карты $ переменная {...}

дефолт: -

контекст: http

В вашем случае вы должны поместить его рядом с server блок, потому что ваш настраиваемый файл конфигурации включен прямо внутри http блок в nginx.conf.

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

server {
  ...
}