[Решено] настройка redirect nginx

Тема в разделе "Администрирование серверов", создана пользователем lehatyapachkin, 13 июн 2018.

Статус темы:
Закрыта.
  1. lehatyapachkin

    lehatyapachkin

    Регистрация:
    13 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, помогите решить проблемку. у меня стоит ubuntu и nginx решил зделать redirect с site.local на www.site.local. в /etc/hosts прописал 127.0.0.1 www.site.local. и теперь если в адресной строке браузера пишу site.local, то переход на www.site.local происходит. Но если на писать ссылку в коде на site.local без www то браузер не находит такую страницу, при обновлении страницы нету и всё тут. но стоит поставить курсор в адресной строке браузера просто нажать ентр то все нормально переход есть.
    разъясните почему так и что я неправильно мог сделать. зарание благодарен!
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.179
    Симпатии:
    1.290
    Там должны быть оба варианта!
    Когда вы в браузере пытаетесь открыть какой-либо адрес, он должен определить ip сервера. Если в /etc/hosts соответствующего адреса нет (в точности), браузер пойдёт на публичный DNS и попробует найти его там (а там его тоже нет в вашем случае).

    И только после того, как браузер определит ip и обратится к нему уже наступит очередь что-либо делать для nginx.

    То есть, если у вас в /etc/hosts не прописан конкретно site.local, то ничего открываться при обращении к этому адресу не должно. То, что при каких-то условиях оно всё же открывается - это уже приколы вашего браузера.
     
  3. lehatyapachkin

    lehatyapachkin

    Регистрация:
    13 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    --- Добавлено, 13 июн 2018 ---
    Здравствуйте, и hrom и firefox ведут себя одинаково. и раньше так и было прописано в /etc/hosts www.site.local, site.local. Но начитался что это два разных сайта, что нужно делать 301 redirect. в виртуальном хосте nginx я прописал
    server_name www.site.local site.local;
    if ($hostname = site.local) {
    rewrite (.*) http://www.site.local$1;
    }
    и соответственно удалил якобы второй вариант из /etc/hosts, а именно site.local без www. теперь если ручками вводишь в адресною строку браузерОВ site.local то переходит на www.site.local, а если на странице тег <а и href = site.local>, то кликаешь по ссылке и нет такой странице. но в адресной строке браузера она уже прописана, обновить страницу не помогает. Но если просто поставить курсор на этот адрес site.local в адресной строке и нажать энтр переход происходит. Как это можно объяснить???
    --- Добавлено, 13 июн 2018 ---
    а и ещё если прописать оба варианта, то необходимость в redirect отпадает итак заходит и на site.local www.site.local, но так получается 2-ва разных сайта. и если в /etc/hosts прописал 127.0.0.1 www.site.local только этот адрес, то тогда браузер должен всегда показывать, что site.local не существует. но это не так, почему?? заранее спасибо!
     
    Последнее редактирование: 13 июн 2018
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.179
    Симпатии:
    1.290
    Всё правильно - это два разных сайта и редирект нужен. Но это не отменяет необходимости прописывать оба варианта в /etc/hosts!

    В общем:
    Редирект - нужен!
    Оба варианта в /etc/hosts - нужно!

    Если сделаете так, то никаких проблем не будет.


    А вообще, это всё нужно только чтоб окружение на вашем локальном сервере соответстоввало реальным условиям. Потому что без редиректа могут возникнуть только 2 проблемы:
    1. Поисковики будут видеть это как два разных сайта, которые дублилуют контент друг друга. Но для локального сервера это не актуально.
    2. В зависимости от движка, могут быть проблемы со ссылками на стили, скрипты и т.д. Но в случае локального сервера, сайтом пользуетесь только вы и просто можете всегда вбивать один вариант адреса.


    Это неправильный вариант! В доках nginx вообще рекомендуется избегать испльзование if насколько это будет возможно.
    Правильно будет сделать для второго варианта адреса отдельный блок server и прописать редирект там:

    Код:
    server {
      listen :80;  # тут могут быть разные варианты, пропишите адрес и порт, как оно у вас в основном блоке server
      listen [::]:80; # и для ipv6, если необходимо
      server_name site.local;
      return 301 http://www.site.local$request_uri;
    }
     
  5. lehatyapachkin

    lehatyapachkin

    Регистрация:
    13 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    ОГРОМНОЕ СПАСИБО)))
     
Статус темы:
Закрыта.