26 августа 2011 г.

NGINX Сервер по-умолчанию.

...дабы не забыть и потом использовать!..

   С точки зрения SEO, для рабочего web проекта с 20к+ посетителей в сутки очень резонно, чтобы не было возможности ходить на ваш любимый сайт по IP-based url. То есть: если есть сайт http://www.goodsite.com, то ссылки вида http://123.123.123.123 (собственно IP адрес сервера где находится ваш сайт) не должны существовать вообще или должны редиректится с кодом 301 на соответствующие разделы вашего сайта.
   Почему это плохо:
1. Много сайтов используют domain name из url для перехода в соответствующие под-домены, разделы и др. и при введении ip адреса в качестве domain name будут вести себя не предсказуемо.
2. Поисковыми машинами ссылки на http://www.goodsite.com и http://123.123.123.123 будут фактически индексироваться как разные сайты.

Как быть? Достаточно просто:
В повседневной работе я использую сервер nginx Игоря Сысоева в качестве фронтэнда для всех своих проектов и на нем реализация схемы с редиректами проходит достаточно легко.



Собственно рассказывать про rewrite в nginx я не буду - писано уже много (google it!). А вот сама суть в директиве server_name: если указать в качестве имени сервера _ (подчёркивание), то при обращении к не существующему виртуальному хосту, будет отрабатывать именно этот сервер. Ну а внутри него можно разрисовать несколько условий в том случае если у вас много виртуальных хостов.

2 комментария:

  1. Евгений, в Вашем коде слишком много регулярных выражений, можно обойтись и без них:

    location / {
    rewrite ^(.*)$ http://www.goodsite.com$1 permanent;
    }

    Также, при написании кода nginx считается хорошим тоном делать такие редиректы, когда строка запроса захватывается полностью, именно выражением "^(.*)$", иначе условие "^/(.*)$" приведёт к дополнительному проходу по искомой строке, что в некоторых (не спорю, пока в чисто гипотетических) ситуациях может значительно повлиять на работоспособность.

    ОтветитьУдалить
  2. Артем, директива location была специально оформлена в виде регулярного выражения так как подразумевается возможность по запросу определить принадлежность к тому или иному виртуальному. В случае только одного сайта на сервере указанный Вами подход будет оправдан, однако при наличии нескольких вирт. хостов будет работать не корректно.

    ОтветитьУдалить