301 редирект nginx: Как настроить 301 редирект (redirect) при помощи Nginx на VPS

Содержание

Инструкция по Созданию Редиректов в NGINX

VPS

Окт 26, 2021

Olha L.

3хв. читання

Nginx (произносится как engine-x) — мощный HTTP веб-сервер с открытым исходным кодом. Он может работать как обратный прокси или прокси POP3/IMAP. Это третий по популярности веб-сервер, известный своей высокой производительностью, простотой использования и настройки, стабильностью и минимальным использованием ресурсов. В этом руководстве мы покажем вам, различные способы перенаправления трафика с помощью Nginx.

По данным Datanyze, Nginx — это 32% всего рынка веб-серверов. Он используется на многих известных сайтах, таких как Github, Netflix, CloudFlare, Hulu, Airbnb, WordPress и многих других.

Прокачайте ваш проект, воспользовавшись скидками на VPS-хостинг в Hostinger! Большой выбор планов, как для учебных, так и для крупных коммерческих проектов.

К предложению

Оглавление

Перенаправления в Nginx

Возможность переадресовать URL-адрес сайта на другой адрес или точку в соответствии с вашими критериями является важной функцией веб-сервера Nginx. Процесс настройки редиректов в Nginx очень простой. Часто пользователи хотят перенаправить страницу с хорошим SEO-рейтингом. Например, при переходе с CMS на другую платформу, ваши URL полностью изменятся. В таком случае, если вы хотите сохранить текущий рейтинг страницы в Google, вы можете перенаправить старый URL на новую страницу.

В этом руководстве мы познакомим вас с двумя видами перенаправлений Nginx: постоянными и временными. Не забудьте установить Nginx (англ) на свой VPS.

Постоянный и Временный Nginx Redirect

Временные перенаправления полезны в том случае, если нам нужно временно изменить местоположение страницы с одного места на другое. Чтобы обозначить временное перенаправление страницы, используется код ответа 302.

Временные перенаправления сообщают пользователям, что сайт временно не доступен, например, когда он закрыт на обслуживание. Ещё один пример временного редиректа, когда вы связываете страницу с неполной информацией с другим пунктом или главной страницей:

Посетитель–> Страница сайта–> Сайт находится на обслуживании

В свою очередь, постоянное перенаправление Nginx сообщает веб-браузеру, что он должен постоянно связывать старую страницу или домен с новым местоположением или доменом. Для обозначения постоянного перемещения страницы используется код ответа 301. Такие перенаправления полезны, когда пользователь хочет изменить имя домена и больше не хочет, чтобы браузер обращался к нему.

Например, если вы хотите изменить домен вашего сайта или создать новую страницу, чтобы заменить старую:

Посетитель –> Нажимает на www.devisers.in/home –> Перенаправлен на www.devisers.in/home1

Перенаправления Страниц в Nginx

Обратите внимание, что сначала вы должны получить доступ к вашему VPS через SSH. Если у вас возникли проблемы, ознакомьтесь с нашим руководством по PuTTY.

В Nginx большинство перенаправлений могут быть реализованы с помощью встроенной функции перезаписи. Перезапись является функцией по умолчанию, доступной в чистой установке Nginx. С её помощью можно создать оба вида перенаправлений Nginx – как постоянные, так и временные. Для самого простого редиректа вам понадобится минимум два параметра – старый URL и новый URL.

Перенаправить страницы на временное или постоянное местоположение на веб-сервере Nginx довольно просто. http://www.devisers.com$request_uri? permanent; }

Здесь мы используем два домена. Тот, который мы хотим перенаправить – www.devisers.in, а новый – www.devisers.com.

Nginx Redirect с HTTP на HTTPS (SSL)

HTTP и HTTPS используют разные порты – HTTP-порт 80 и HTTPS-порт 443. HTTPS означает безопасное соединение, защищённое от MITM-атак, которые могут перехватить ваш сеанс. Обратите внимание, что для того, чтобы этот метод работал, вам нужно настроить SSL. Таким образом, чтобы защитить информацию, которая циркулирует между вами и вашими посетителями, следует перенаправлять все запросы, поступающие с HTTP на HTTPS. Для этого мы можем добавить следующую модификацию в тот же файл:

server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}

Теперь весь трафик на дефолтный HTTP-сервер перенаправляется на HTTPS.

Nginx Redirect Определённых Сайтов

Если вы используете различные сайты или приложения и хотите перенаправить только один из них, следуйте инструкциям:

server { 
listen 80; 
server_name devisers. in;
     return 301 https://devisers.in$request_uri; 
}

В этом примере мы перенаправляем сайт http://www.devisers.in на https://www.devisers.in.

Переадресация с www на без www

Вы наверняка обращали внимание, что есть сайты, на которые можно попасть, прописав www в начале адреса, так и без этого. Если вы хотите, чтобы посетители могли прийти на ваш сайт просто по домену вашей веб-страницы, тогда вы можете настроить соответствующий редирект. В Nginx есть много способов переадресации с www на без www. Вот один из самых простых:

server {
    server_name www.devisers.in;
    return 301 $scheme://devisers.in$request_uri;
}

Важно: это постоянный, или “301 редирект”.

Чтобы увидеть изменения, перезапустите веб-сервер Nginx, используя команду:

sudo systemctl restart Nginx

Для редиректа с без www на www, просто замените URL сайта в примере выше. Вместо www.devisers.in укажите devisers.in.

Выводы

Nginx – это один из самых мощных и простых в использовании веб-серверов, который позволяет создавать как временные, так и постоянные перенаправления.

 

Теперь вы знаете, как создать Nginx redirect с HTTP на HTTPS, с www на без www и наоборот. Убедитесь, что вы используете правильные типы перенаправлений, так как неправильные редиректы будут влиять на ваш рейтинг в поиске. С помощью точных переадресаций вы можете поддерживать текущий рейтинг в Интернете, при этом изменяя структуру сайта по мере необходимости.

Надеемся, что это руководство будет вам полезным. Увидимся в следующем!

Ольга вже близько восьми років працює менеджером у сфері IT, три з яких вона займається SEO. Написання технічних завдань та інструкцій — один з її основних обов’язків. Її хобі — дізнаватися щось нове і створювати цікаві та корисні статті про сучасні технології, веброзробку, мови програмування, пошукову оптимізацію сайтів та багато іншого.

Більше статей від Olha L.

Конфигурация nginx для перенаправление сайта с-www на без-www с использованием SSL-сертификата

Как правильно настроить nginx для 301 редиректов основных зеркал сайта для корректного SEO продвижения? Давайте разберемся. Для начала правильно сформулируем задачу. Любой сайт, как правило, может быть доступен по 4-ым основным зеркалам. Откуда 4ре и как их быстро запомнить для тестирования в любое для и ночи при настройке перенаправлений? Делюсь своими правилами.

4 варианта зеркал сайта

  1. любой сайт может быть доступен по двум протоколам: HTTP и HTTPS — это 2 варианта
  2. т.к. на заре зарождения интернета была традиция начинать проговаривать названия сайта с трех W — то логично любой домен делать доступным и с поддоменом www — это еще 2 варианта

Итого получаем 2 * 2 = 4 варианта обращения к главной странице сайта в адресной строке браузера. Рассмотрим на примере домена tale.by:

  1. http://tale.by
  2. https://tale.by
  3. http://www.tale.by
  4. https://www.tale.by

Это и есть основные 4 зеркала сайта, о которых идет речь в данной статье. Главный на палубе определяет, какой вараинт домена является основные, а дальше технический специалист со всех остальных 3-х вариантов настраивает 301 редирект на главное зеркало. В случае нашего сайта — это www.tale.by. Почему капитан сказал оставить www ? Потому что домен короткий и на визитках с www лучше смотрится. Обычно домены не бывают такими короткими, и основным зеркалом делают вариант без поддомена — так мы сделали на сайте arista.by.

Настройка выделенного сервера для редиректов

В этой статье рассмотрена самая популярная конфигурация VPS на момент написания:

  • операционная система — Ubuntu 18.04
  • веб-сервер — nginx
  • бесплатные SSL сертификаты — Let’s Encrypt
  • утилита для генерации сертификатов — certbot

Для чего нужен SSL-сертификат

SSL-сертификат нужен для корректной работы сайта по протоколу HTTPS. Зачем вообще сайту работать по протоколу HTTPS? И чем он отличается от старого-доброго HTTP?

Что такое протокол HTTPS

S на конце — это сокращение от английского слова Secure — что в переводе означает безопасность. Когда мы хотим открыть в браузере сайт — наш просмоторщик устанавливает соединение с компьютером, на котором хранятся файлы этого сайта. Наш компьютер называется клиентом, а компьютер сайта — сервером. В процессе клиент-серверного взаимодействия между ними передаются байты информации, а чтобы и клиенту, и серверу было понятно, как трактовать переданную/принятую информацию — нужен алгоритм общения между ними. Этот алгоритм общения регулируется опредленным сводом правил — протоколом. HTTP — это название для протокола общения клиента и сервера. Secure HTTP — HTTPS — это вариант общения, когда передаваемые данные шифруются.

Зачем сайту передаваться между комьютерами в зашифронованном виде?

Объективно это надо только тогда, когда передается важная информация, к примеру, данные о платженой карте.

Несколько лет назад браузеры не проявляли визуальной враждебности к сайтам, работающим по протокалу HTTP. Но теперь в адресной строке такие сайты подсвечиваются как небезопасные. Поэтому любой маркетолог и SEO-шник вам скажет: не отпугивайте посетителей, используйте безопасный протокол передачи данных — HTTPS. Согласитесь, одной этой причины уже достаточно, чтобы не рассматривать работу по нешифрованному протоколу HTTP.

Связь HTPS и SSL-сертификата

Не вникая в глубины теории, чтобы шифрование по протоколу HTTPS работало нужны два файла: секретный ключ и публичный ключ. Очень грубо говоря SSL-сертификат из них и состоит. Кашэрный сертификат должен быть удостоверен авторитетным центром. Если попытаться открыть сайт по протоколу HTTPS,  а на сервере сайта не будет находиться привязанного к сайту, действительного сертификата, то вместо содержимого сайта ваш браузер выдаст враждебно раскрашенное предупреждение о попытке установления небезопасного соединения:

Бесплатный SSL-сертификат

Из вышесказанного должно быть понятно, что для корректной работы сайта по протоколу HTTPS нужно достать дейтсвительный SSL-сертификат. Обычно их предлагают за маленькие и не маленькие деньги хостер-провайдеры. На определенных не базовых тарифах хостинга в качестве бонуса могут давать сертификаты бесплатно. Какой выбрать? Все зависит от специфики конкретного сайта. Если вы через свой сайт не передаете важные конфиденциальные данные — используйте бесплатный. Иначе — тот, на который денег не жалко.

На собственном VPS сгенерировать бесплтаный Let’s Encrypt SSL-сертификат можно при помощи утилиты certbot — она в считанные секунды сгенерирует сертификаты и настроит nginx для работы с ними. 

Рассмотрми на примере сайта madewithfire.com. Я хочу, чтобы certbot сам добавил в конфиг вирутального хоста nginx пути к сгенерированным ключам сертификата и настроил 301-редиректы. Что для этого надо?

Запуск certbot для nginx

Запускаем команду в терминале виртуального сервера: certbot —nginx -d madewithfire.com -d www.madewithfire.com

Когда команда задаст вопрос: Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access — выбираем: 

2: Redirect — Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration.

Далее открываем сайт с конфигом и проверяем редиректы.

Перенаправление https://www на просто https:// без www

Для этого должна быть прописана конфиграция сервера, которая:

  • обрабатывает домен с поддоменом www: server_name  www.madewithfire.com;
  • слушает порт 443 (listen 443 ssl), указывая по какому пути лежат ключи для шифрования
  • делает 301 редирект на главное зеркало: return 301 https://madewithfire.com$request_uri;

Код для такой конфигурации приведен ниже:

server {
    server_name  www.madewithfire.com;
    return       301 https://madewithfire.com$request_uri;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/madewithfire.com/fullchain. pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/madewithfire.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Настройка server для основного зеркала

Эта настройка должа включать следующее:

  • что она для версии сайта без www: server_name madewithfire.com;
  • что прослушивается 443 порт и указаны пути для ключей

Отрывки этой конфигурации приведены ниже:

 

server {
	server_name madewithfire.com;
...	
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/madewithfire.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/madewithfire.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Перенаправление не-www версии сайта с http на https

Должно быть:

  • слушается порт 80: listen 80;
  • server_name madewithfire. com;
  • происходит 301 редирект на https://

Конфигурация приведена ниже. Она делает редирект с http://madewithfire.com на https://madewithfire.com

server {
    if ($host = madewithfire.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
	server_name madewithfire.com;
    listen 80;
    return 404; # managed by Certbot
}

Перенаправление с http://www на https://www

Для этого нужно:

  • прослушивать 80-ый порт: listen 80;
  • версией с поддоменом www: server_name  www.madewithfire.com;
  • возвращать 301 редирект: return 301 https://$host$request_uri;

Пример конфига от certbot для этого случая приведен ниже:

server {
    if ($host = www.madewithfire.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    server_name  www.madewithfire.com;
    listen 80;
    return 404; # managed by Certbot
}

Проверка на внимательность

Внимательный читатель может заметить:

  1. в последнем конфиге перенаправление на главное зеркало идет не сразу. Конфиг направит непосредственно на версию https://www — а она уже перенаправит на https:// без www
  2. в конфигах от certbot есть много лишнего. К примеру, в п1 выше можно было сразу перенаправить на главное зеркало. Но надо понять, что certbot старается сгенерировать универсальную конфигурацию — а универсальная не равна оптимальной
  3. проверка на if ($host = … вообще не обязательна, потому что в этих примерах в server_name указывается только один домен
  4. по умолчанию http запросы обрабатываются 80-ым портом, а https — 443
  5. если конфиг настроен на прослушку 443 порта, надо указывать, где лежат ключи для действительного сертификата

Количество просмотров: 2 285

Поделиться в соцсетях:

Сервер Настройка редиректов | Правила ведения проектов

Редактировать

Сервисы

  • https://bertal.ru/

Nginx

http://stackoverflow.com/questions/7947030/nginx-no-www-to-www-and-www-to-no-www

www -> no www
server {
    server_name  www. (.*) http://domain.com$1 permanent;
}
server {
    server_name  domain.com;
    #The rest of your configuration goes here#
}

1) создать файл include conf/disable/log.conf;

access_log      off;
log_not_found   off;

2) сами редиректы

server {
    listen              80;
    server_name www.tandoors.ru tandoors.ru;
    include conf/disable/log.conf;
    return 301 https://tandoor.ru$request_uri ;
}
server {
    listen              80;
    server_name www.tandoor.ru tandoor.ru;
    include conf/disable/log.conf;
    return 301 https://tandoor.ru$request_uri ;
}
server {
    listen              443 ssl;
    server_name www.tandoors.ru tandoors.ru;
    include conf/disable/log.conf;
    return 301 https://tandoor.ru$request_uri ;
}
server {
    listen              443 ssl;
    server_name www.tandoor.ru;
    include conf/disable/log.conf;
    return 301 https://tandoor.ru$request_uri ;
}
server {
    # Включение HTTPS и HTTP/2
    listen	443 ssl http2;
    server_name tandoor.
ru; # ... остальная часть настроек ... }

Apache

Как работает mode_rewrite и как правильно писать и читать правила RewriteRule и RewriteCond

Синтаксис htaccess, полное руководство

Настройка файла htaccess

301 редирект (переадресация) через .htaccess – на все случаи жизни

301 редирект (переадресация) через .htaccess – на все случаи жизни

Советы

Располагайте переадресации страниц в файле от частных к более глобальным (сверху вниз). Например: простая переадресация двух страниц стоит выше, чем глобальное правило редиректов с www на без www.
Избегайте двух, трех и т.д. последовательных редиректов. Правила должны быть настроены так, что при возникновении редиректа он должен перенаправлять пользователя (робота) только один (!) раз. Каждое лишнее переадресация – это секунды драгоценного времени отдачи страницы, это нагрузка на сервер, это нечеткие команды для поисковых роботов.
Не забывайте, что многие браузеры кешируют (запоминают редиректы), поэтому проверять переадресации лучше на сайте — http://www. (.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
  1. Удалить повторяющиеся слеши
RewriteCond %{THE_REQUEST} //
RewriteRule (.*) /$0 [R=301,L]

Как настроить NGINX 301 Redirect

NGINX — очень мощный инструмент веб-сервера для балансировки потребностей программного обеспечения или веб-приложения. Его используют почти 42,2% всех известных веб-сайтов и известных веб-серверов, чуть уступая Apache, который используется 43,3% всех веб-сайтов по состоянию на 2019 год. Излишне говорить, что это популярное и удобное программное обеспечение с открытым исходным кодом.

NGINX 301 Перенаправления — это очень полезный способ правильного перенаправления адресов в браузере. Владельцам веб-сайтов обычно необходимо делать это при смене доменов или переупорядочении контента на своем веб-сайте.

Так как именно выполняется это перенаправление? Давайте углубимся в то, как можно выполнить перенаправление NGINX 301 шаг за шагом.

Связанный: Полное руководство для начинающих по отображению на первой странице Google

Что такое перенаправление NGINX 301?

NGINX — это тип программного обеспечения с открытым исходным кодом для кэширования, балансировки нагрузки, обратного проксирования и многого другого. Изначально NGINX разрабатывался как веб-сервер для повышения производительности и стабильности. Помимо возможностей HTTP-сервера NGINX, его также можно использовать в качестве прокси-сервера для электронной почты, а также в качестве обратного прокси-сервера и балансировщика нагрузки для различных типов серверов.

NGINX 301 Redirect — это форма перенаправления HTTP. Можно использовать перенаправление HTTP, чтобы перенаправить один домен или адрес на другой домен или адрес. Существует несколько типов перенаправлений, каждый из которых имеет разное значение в клиентском браузере. Двумя наиболее используемыми и известными типами перенаправления являются «временные» перенаправления и «постоянные» перенаправления.

Постоянные перенаправления, такие как NGINX 301 Redirect, просто заставляют браузер полностью забыть старый адрес и предотвращают дальнейшие попытки доступа к этому адресу. Эти перенаправления очень полезны, если ваш контент был постоянно перемещен в новое место, например, когда вы меняете доменные имена или серверы.

Теперь, когда мы знаем, что такое NGINX 301 Redirect, давайте рассмотрим различные способы его настройки.

Как настроить перенаправление NGINX 301

Если вам нужно настроить перенаправление NGINX, вы можете выбрать один из нескольких вариантов.

Самый простой и быстрый способ выполнить перенаправление — использовать оператор «return». Чтобы выполнить это утверждение, поместите следующий код в блок server :

return 301 https://sample.com$request_uri; 9/foo/(bar)/(.*)$ $scheme://$server_name/$1/$2 Permanent;}

Присоединяйтесь к более чем 1000 других компаний и проанализируйте свой веб-сайт с помощью Twiz

Довольно просто, правда? Теперь, если у вас есть группа адресов или регулярных выражений, которые нужно перенаправлять по отдельности и по-разному, вы можете использовать карты. Карты могут быть определены в отдельных файлах, и их определения должны быть вне блока сервера. Это будет выглядеть примерно так:

include redirect-map. conf;server {    […]    if ( $redirect_uri ) {        return 301 $redirect_uri; }}

После выполнения файл конфигурации для карты перенаправления будет выглядеть примерно так:

map $request_uri $redirect_uri {    /about.html          /about-us; /partners.html      /наши партнеры; /services.html       /our-services;}

Стоит отметить, что регулярные выражения чувствительны к регистру символов. Сопоставление с учетом регистра должно начинаться с ~ , а сопоставление без учета регистра должно начинаться с ~*. Обратите внимание, что $redirect_uri можно назвать как угодно, но имя переменной в карте должно совпадать с именем блока сервера. Этот пример кода показывает это:

карта $request_uri $redirect_uri {    /about.html          /about-us; /partners.html      /наши партнеры; /services.html       /наши-услуги; # Соответствует любому URL-адресу, который заканчивается на services.html или services.htm    ~services\.html?$    /our-services; # нечувствительная к регистру версия приведенного выше    ~*services\. html?$   /our-services; # Именованный захват, отображающий    # например. service-1234.html в /services/item-1234/overview    ~service-(?\d+)\.html   /services/item-$sku/overview;}

Есть также дополнительные переменные, которые вы можете учитывать, которые уже предопределены в NGINX для использования в конфигурациях. К ним относятся:

  • $server_name. Это первое имя из объявления имени хоста в конфигурации для блока сервера, который немедленно отвечает на запрос.
  • $request_uri. Это полный унифицированный идентификатор ресурса (или URI) исходного запроса, который включает аргументы.
  • $запрос_имя_файла. Это путь к файлу для текущего запроса.
  • $схема. Это конкретная схема, используемая для вашего текущего запроса, например «https».
  • $хост. Это имя хоста, предоставленное клиентом для данного запроса.

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

Вероятно, в NGINX можно использовать миллион различных способов перенаправления. Некоторые из них включают:

9www\.(?.+)$ ) {    return 301 $scheme://$domain$request_uri;}

HTTP на HTTPS

Вы можете выполнить это перенаправление с помощью;

возврат 301 https://$host$request_uri;

Создайте каноническое имя хоста

Это перенаправление полезно для предотвращения дублирования контента. Код будет выглядеть примерно так:

имя_сервера sample.com www.sample.com запрос_ури;}

Каким было наше руководство по выполнению перенаправления NGINX 301? Расскажите нам, что вы думаете, а также свои собственные советы по выполнению этого перенаправления в комментариях ниже.

Как настроить перенаправление Nginx на HTTPS, www/non-www и многое другое!

ВПС

09 августа 2022 г.

Эдвард С.

4 мин Чтение

Nginx (произносится как engine-x) — это мощный высокопроизводительный веб-сервер HTTP с открытым исходным кодом. Он может работать как обратный прокси-сервер или прокси-сервер POP3/IMAP. Это третий по популярности веб-сервер, хорошо известный своей повышенной производительностью, простотой использования и настройки, стабильностью и минимальным использованием ресурсов. Вот почему в этом руководстве мы покажем вам, как использовать Nginx для перенаправления трафика различными способами.

По данным Datanyze, Nginx занимает 32% рынка веб-серверов. Он поддерживает множество известных веб-сайтов, таких как Github, Netflix, Cloudflare, Hulu, Airbnb, Hulu, WordPress и многие другие.

Загрузить полную памятку по командам Linux

Перенаправление в Nginx

Возможность переадресации URL-адреса веб-сайта на другой адрес или точку на основе ваших критериев является важной функцией веб-сервера Nginx. Редирект Nginx прост и удобен в настройке. Часто пользователи выбирают для перенаправления страницу с хорошим SEO-рейтингом. Например, при переходе с CMS на другую платформу. Это полностью изменит состав вашего URL. Таким образом, чтобы сохранить текущую страницу с хорошей позицией в поисковой выдаче, вы можете перенаправить старый URL-адрес на новую страницу.

В этом руководстве мы покажем вам, как создать два вида перенаправления Nginx: постоянное и временное. Не забудьте установить Nginx на свой VPS.

Временное и постоянное перенаправление Nginx Объяснение

Временные перенаправления полезны, если местоположение страницы необходимо временно изменить с одного места на другое. Код ответа перенаправления 302 используется для обозначения временного перемещения страницы.

Если проводится техническое обслуживание веб-сайта, используются временные перенаправления для уведомления пользователей о том, что веб-сайт недоступен. Другой пример — когда вы делаете временную переадресацию незавершенной страницы; вы связываете эту страницу с другой точкой или главной страницей:

Посетитель -> Страница веб-сайта -> Веб-сайт находится на обслуживании

С другой стороны, постоянное перенаправление Nginx информирует веб-браузер о том, что он должен постоянно связывать старую страницу или домен с новым местоположением или доменом. Чтобы отобразить это изменение, код ответа перенаправления 301 используется для обозначения постоянного перемещения страницы. Эти виды перенаправлений полезны, когда пользователь хочет изменить доменное имя и больше не хочет, чтобы браузер обращался к нему.

Например, если вы хотите изменить домен своего веб-сайта или создать новую страницу для старой:

Посетитель–> Нажмите www.devisers.in/home -> Перенаправление на www. разработчики. in/home1

Перенаправление страниц в Nginx

Помните, что сначала вам нужно получить доступ к вашему VPS через SSH. Если у вас возникли проблемы, ознакомьтесь с нашим руководством по PuTTY.

В Nginx большинство перенаправлений можно выполнить с помощью встроенной функции перезаписи. Это функция по умолчанию, которая доступна при чистой установке Nginx и может формировать оба типа перенаправления Nginx — то есть постоянное и временное. В простой форме он принимает как минимум два случая: старый URL-адрес и новый URL-адрес. 9http://www.devisers.com$request_uri? постоянный; }

Здесь мы используем два домена. Тот, который мы хотим перенаправить — www.devisers.in, а новый — www.devisers.com.

Перенаправление Nginx с HTTP на HTTPS (SSL)

HTTP и HTTPS используют разные порты — HTTP-порт 80 и HTTPS-порт 443. Использование HTTPS гораздо полезнее, поскольку оно защищает вас от атак MITM, которые могут перехватить ваш сеанс. Помните, что для работы этого метода у вас должен быть уже настроен SSL. Итак, чтобы защитить всю информацию, передаваемую между вами и вашими посетителями, полезно перенаправить все запросы, поступающие с HTTP на HTTPS. Для этого мы можем добавить эту модификацию в этот же файл:

 сервер {
слушать 80 default_server;
имя сервера _;
вернуть 301 https://$host$request_uri;
} 

Теперь весь трафик для HTTP-сервера по умолчанию перенаправляется на HTTPS.

Nginx перенаправляет определенные сайты

Это важно, если вы используете различные сайты или приложения и хотите перенаправить только один сайт. Выполните следующие действия:

 сервер {
слушать 80;
имя_сервера devisers.in;
вернуть 301 https://devisers.in$request_uri;
} 

Здесь мы перенаправляем сайт http://www.devisers.in на https://www.devisers.in

Перенаправление с www на не-www

Во многих случаях вы хотите, чтобы ваши посетители обращались к простому домену вашей веб-страницы, например, devisers.in вместо www.devisers.in. Хотя в Nginx существует множество вариантов перенаправления с www на без www, один из простых способов сделать это описан ниже:

 server {
имя_сервера www.devisers.in;
вернуть 301 $scheme://devisers.in$request_uri;
} 

Важно! Это постоянное перенаправление или «301 перенаправление».

Перезапустите веб-сервер Nginx, чтобы изменения вступили в силу, с помощью команды:

 sudo systemctl restart Nginx 

Если вы хотите перенаправить с не-www на www, просто замените URL-адрес веб-сайта, указанный в приведенной выше команде. Замените www.devisers.in на devisers.in и наоборот.

Заключение

Nginx — один из самых мощных и простых в использовании веб-серверов, который позволяет делать временные и постоянные перенаправления, как описано выше.

Теперь вы знаете, как создавать редирект Nginx с HTTP на HTTPS, с www или без www или наоборот. Убедитесь, что вы используете правильные типы перенаправления, так как неправильные перенаправления повлияют на ваш поисковый рейтинг. С помощью точных перенаправлений вы можете использовать свое текущее присутствие в Интернете, изменяя структуру сайта по мере необходимости.

Мы надеемся, что это руководство поможет вам! Увидимся в следующем.

Эдвард — редактор контента с многолетним опытом работы в области ИТ в качестве писателя, маркетолога и энтузиаста Linux. Цель Эдварда — побудить читателей создать впечатляющее присутствие в Интернете. Еще он очень любит собак, гитары и все, что связано с космосом.

Подробнее от Эдварда С.

Как создать правила перезаписи NGINX

В этой записи блога мы обсуждаем, как создавать правила перезаписи NGINX (одинаковые методы работают как для NGINX Plus, так и для программного обеспечения NGINX с открытым исходным кодом). Правила перезаписи изменяют часть или весь URL-адрес в клиентском запросе, как правило, для одной из двух целей:

  • Для информирования клиентов о том, что запрашиваемый ими ресурс теперь находится в другом месте. Примеры использования: когда доменное имя вашего веб-сайта изменилось, когда вы хотите, чтобы клиенты использовали канонический формат URL-адреса (с префиксом www или без него), и когда вы хотите отловить и исправить распространенные орфографические ошибки в вашем доменном имени. Для этих целей подходят директивы return и rewrite .
  • Для управления потоком обработки в NGINX и NGINX Plus, например для пересылки запросов на сервер приложений, когда контент должен создаваться динамически. 9Для этой цели часто используется директива 0248 try_files .

Примечание: Чтобы узнать, как преобразовать правила перезаписи HTTP-сервера Apache в правила перезаписи NGINX, см. нашу сопутствующую запись в блоге Преобразование правил перезаписи Apache в правила перезаписи NGINX.

Предполагается, что вы знакомы с кодами ответов HTTP и регулярными выражениями (NGINX и NGINX Plus используют синтаксис Perl).

Сравнение

return , rewrite и try_files Directives

Две директивы общего назначения для перезаписи NGINX — это return и rewrite , а директива try_files — это удобный способ направлять запросы к серверам приложений. Давайте рассмотрим, что делают директивы и чем они отличаются.

Директива

return

Директива return является более простой из двух директив общего назначения, и по этой причине мы рекомендуем использовать ее вместо rewrite , когда это возможно (подробнее о том, почему и когда). Вы заключаете return в контекст server или location , который указывает URL-адреса, которые должны быть перезаписаны, и определяет исправленный (переписанный) URL-адрес, который клиент будет использовать в будущих запросах на ресурс.

Вот очень простой пример, который перенаправляет клиентов на новое доменное имя:

 сервер {
    слушать 80;
    слушать 443 ssl;
    имя_сервера www.old-name.com;
    вернуть 301 $scheme://www.new-name.com$request_uri;
} 

Директивы listen означают, что блокировка сервера применяется как к трафику HTTP, так и к трафику HTTPS. Директива server_name сопоставляет URL-адреса запросов, которые имеют доменное имя www.old‑name.com . Директива return указывает NGINX прекратить обработку запроса и немедленно отправить код 301 (перемещено навсегда) и указанный переписанный URL-адрес клиенту. Переписанный URL-адрес использует две переменные NGINX для захвата и репликации значений из исходного URL-адреса запроса: $scheme — это протокол ( http или https ), а $request_uri — это полный URI, включая аргументы.

Для кода из серии 3 xx параметр url определяет новый (переписанный) URL.

 возврат (301 | 302 | 303 | 307)  url  ; 

Для других кодов вы дополнительно определяете текстовую строку, которая появляется в теле ответа (стандартный текст для кода HTTP, например, Не Найден за 404 , все еще в шапке). Текст может содержать переменные NGINX.

 возврат (1  хх  | 2  хх  | 4  хх  | 5  хх  ) [" текст "]; 

Например, эта директива может быть уместна при отклонении запросов, не имеющих действительного токена аутентификации:

 вернуть 401 «Доступ запрещен, поскольку токен просрочен или недействителен»; 

Есть также несколько синтаксических сокращений, которые вы можете использовать, например, опускание кода, если он равен 302 ; см. справочную документацию по директиве return .

(В некоторых случаях вы можете захотеть вернуть ответ, который является более сложным или детализированным, чем вы можете получить в текстовой строке. С помощью директивы error_page вы можете вернуть полную пользовательскую HTML-страницу для каждого HTTP-кода, как а также изменить код ответа или выполнить перенаправление.)

Таким образом, директива return проста в использовании и подходит, когда перенаправление удовлетворяет двум условиям: переписанный URL-адрес подходит для каждого запроса, который соответствует server или location block, и вы можете создать переписанный URL со стандартными переменными NGINX.

переписывает директиву

Но что, если вам нужно проверить более сложные различия между URL-адресами, захватить элементы в исходном URL-адресе, которые не имеют соответствующих переменных NGINX, или изменить или добавить элементы в пути? В таких случаях вы можете использовать директиву rewrite .

Как и директива return , вы заключаете переписать директиву в контексте сервера или местоположения , который определяет URL-адреса, которые должны быть перезаписаны. В противном случае две директивы скорее отличаются, чем похожи, и директиву rewrite может быть сложнее правильно использовать. Его синтаксис достаточно прост:

 переписать  регулярное выражение   URL  [  флаг  ]; 

Но первый аргумент, regex , означает, что NGINX Plus и NGINX переписывают URL-адрес, только если он соответствует указанному регулярному выражению (в дополнение к совпадению server или директива location ). Дополнительный тест означает, что NGINX должен выполнять больше обработки.

Второе отличие состоит в том, что директива rewrite может возвращать только код 301 или 302 . Чтобы вернуть другие коды, необходимо включить директиву return после директивы rewrite (см. пример ниже).

И, наконец, директива rewrite не обязательно останавливает обработку запроса NGINX как возвращает , и это не обязательно отправляет клиенту перенаправление. Если вы явно не укажете (с помощью флагов или синтаксиса URL-адреса), что хотите, чтобы NGINX остановил обработку или отправил перенаправление, он просматривает всю конфигурацию в поисках директив, определенных в модуле перезаписи ( break , if , возвращают , заменяют , а задают ), и обрабатывает их по порядку. Если переписанный URL-адрес соответствует последующей директиве из модуля Rewrite, NGINX выполняет указанное действие над переписанным URL-адресом (часто перезаписывая его снова).

Здесь все может усложниться, и вам нужно тщательно спланировать порядок действий, чтобы получить желаемый результат. Например, если исходный блок location и правила перезаписи NGINX в нем совпадают с переписанным URL-адресом, NGINX может попасть в цикл, применяя перезапись снова и снова до встроенного ограничения в 10 раз. Чтобы узнать все подробности, смотрите документацию к модулю Rewrite. Как отмечалось ранее, мы рекомендуем по возможности использовать return 9.вместо директивы 0249.

Вот пример правила перезаписи NGINX, в котором используется директива rewrite . Он соответствует URL-адресам, которые начинаются со строки /download , а затем включают каталог /media/ или /audio/ где-то дальше по пути. Он заменяет эти элементы на /mp3/ и добавляет соответствующее расширение файла, .mp3 или .ra . Переменные $1 и $2 фиксируют неизменяемые элементы пути. Например, 9(/download/.*)/audio/(\w+)\.?.*$ $1/mp3/$2.ra последний; вернуть 403; # ... }

Выше мы упоминали, что вы можете добавить флаги в директиву rewrite для управления потоком обработки. Флаг last в примере является одним из них: он указывает NGINX пропустить все последующие директивы Rewrite-module в текущем блоке server или location и начать поиск нового location , соответствующего переписанному URL-адресу. .

Последняя директива return в этом примере означает, что если URL-адрес не соответствует директиве rewrite , клиенту возвращается код 403 .

Директива

try_files

Подобно директивам return и rewrite , директива try_files размещается на сервере или в блоке . В качестве параметров он принимает список из одного или нескольких файлов и каталогов и окончательный URI:

 try_files  файл  ...  uri  ; 

NGINX проверяет наличие файлов и каталогов по порядку (составляя полный путь к каждому файлу из настроек директив root и alias ) и обслуживает первый найденный. Чтобы указать каталог, добавьте косую черту в конце имени элемента. Если ни один из файлов или каталогов не существует, NGINX выполняет внутреннее перенаправление на URI, определенный конечным элементом ( ури ).

Чтобы директива try_files работала, вам также необходимо определить блок location , который фиксирует внутреннее перенаправление, как показано в следующем примере. Последним элементом может быть именованное местоположение, обозначенное начальным знаком at ( @ ).

Директива try_files обычно использует переменную $uri , которая представляет часть URL-адреса после имени домена.

В следующем примере NGINX предоставляет файл GIF по умолчанию, если файл, запрошенный клиентом, не существует. Когда клиент запрашивает (например) http://www.domain.com/images/image1.gif , NGINX сначала ищет image1.gif в локальном каталоге, указанном директивой root или alias , которая относится к местоположению (не показано во фрагменте). Если image1.gif не существует, NGINX ищет image1.gif/ и, если он не существует, перенаправляет на /images/default. gif . Это значение точно соответствует второй директиве location , поэтому обработка останавливается, NGINX обслуживает этот файл и помечает его для кэширования на 30 секунд.

 местоположение /изображения/ {
    try_files $uri $uri/ /images/default.gif;
}

местоположение = /images/default.gif {
    истекает 30 с;
} 

Примеры – стандартизация доменного имени

Одним из наиболее распространенных способов использования правил перезаписи NGINX является захват устаревших или нестандартных версий доменного имени веб-сайта и перенаправление их на текущее имя. Есть несколько связанных вариантов использования.

Перенаправление с прежнего имени на текущее имя

Этот пример правила перезаписи NGINX постоянно перенаправляет запросы с www.old‑name.com и old‑name.com на www.new‑name.com с использованием двух переменных NGINX для захвата значений из исходного URL-адреса запроса. $scheme — исходный протокол ( http или https ), а $request_uri — полный URI (после имени домена), включая аргументы:

 server {
    слушать 80;
    слушать 443 ssl;
    имя_сервера www.старое-имя.com старое-имя.com;
    вернуть 301 $scheme://www.new-name.com$request_uri;
} 

Поскольку $request_uri фиксирует часть URL-адреса, которая следует за доменным именем, эта перезаписи подходит, если существует однозначное соответствие страниц между старым и новым сайтами (например, www.new-name .com/about имеет то же основное содержание, что и www.old‑name.com/about ). Если вы реорганизовали сайт в дополнение к изменению доменного имени, может быть безопаснее вместо этого перенаправить все запросы на домашнюю страницу, опустив $request_uri 9.  ], который полностью соответствует исходному URL). Соответствующая директива return также легче интерпретируется читателем: return   301 более ясно указывает, что NGINX возвращает код 301 , чем rewrite     . ..   постоянная нотация 90.

Добавление и удаление префикса www

Эти примеры добавляют и удаляют префикс www :

 # add 'www'
сервер {
    слушать 80;
    слушать 443 ssl;
    имя_сервера домен.com;
    вернуть 301 $схема://www.domain.com$request_uri;
}

# удалить "www"
сервер {
    слушать 80;
    слушать 443 ssl;
    имя_сервера www.domain.com;
    вернуть 301 $схема://домен.com$request_uri;
} 9(.*)$ $схема://www.domain.com$1 постоянная; 

Перенаправление всего трафика на правильное доменное имя

Вот особый случай, когда входящий трафик перенаправляется на домашнюю страницу веб-сайта, когда URL-адрес запроса не совпадает ни с одним блоком server и location , возможно, из-за неправильного написания имени домена. . Он работает путем объединения параметра default_server с директивой listen и символом подчеркивания в качестве параметра server_name 9. директива 0249.

 сервер {
    слушать 80 default_server;
    слушать 443 ssl default_server;
    имя сервера _;
    вернуть 301 $схема://www.domain.com;
} 

Мы используем символ подчеркивания в качестве параметра для имя_сервера , чтобы избежать случайного совпадения с реальным доменным именем — можно с уверенностью предположить, что ни один сайт никогда не будет использовать подчеркивание в качестве своего доменного имени. Запросы, которые не соответствуют каким-либо другим блокам server в конфигурации, попадают сюда, и default_server параметр для listen указывает NGINX использовать этот блок для них. Исключая переменную $request_uri из переписанного URL-адреса, мы перенаправляем все запросы на домашнюю страницу, что является хорошей идеей, поскольку запросы с неправильным доменным именем, скорее всего, будут использовать URI, которых нет на веб-сайте.

Пример. Принудительное использование SSL/TLS для всех запросов

Этот блок сервера заставляет всех посетителей использовать защищенное (SSL/TLS) соединение с вашим сайтом. 9https://www.mydomain.com$uri постоянный; }

Но этот метод требует дополнительной обработки, потому что NGINX должен как оценить условие if , так и обработать регулярное выражение в директиве rewrite .

Пример – включение Pretty Permalinks для веб-сайтов WordPress

NGINX и NGINX Plus — очень популярные платформы доставки приложений для веб-сайтов, использующих WordPress. Следующая директива try_files указывает NGINX проверить наличие файла, $uri , а затем каталог $uri/ . Если ни файла, ни каталога не существует, NGINX возвращает перенаправление на /index.php и передает аргументы строки запроса, которые фиксируются параметром $args .

 местоположение / {
    try_files $uri $uri/ /index.php?$args;
} 

Пример – удаление запросов для неподдерживаемых расширений файлов

По разным причинам ваш сайт может получать URL-адреса запросов, которые заканчиваются расширением файла, соответствующим серверу приложений, который у вас не запущен. В этом примере из блога Engine Yard сервер приложений — Ruby on Rails, поэтому запросы с типами файлов, которые обрабатываются другими серверами приложений (Active Server Pages, PHP, CGI и т. д.), не могут быть обслужены и должны быть отклонены. В server , который передает любые запросы на динамически сгенерированные ресурсы в приложение, эта директива location отбрасывает запросы для типов файлов, отличных от Rails, до того, как они попадут в очередь Rails.

 местоположение ~ .(aspx|php|jsp|cgi)$ {
    вернуть 410;
} 

Строго говоря, код ответа 410 (Gone) предназначен для ситуаций, когда запрошенный ресурс раньше был доступен по этому URL, но его больше нет, и сервер не знает его текущего местоположения, если оно есть. Его преимущество перед кодом ответа 404 заключается в том, что он явно указывает, что ресурс постоянно недоступен, поэтому клиенты больше не будут отправлять запрос.

Возможно, вы захотите предоставить клиентам более точное указание причины сбоя, вернув код ответа 403 (Запрещено) и пояснение, такое как "Сервер   обрабатывает только

8 Ruby   запросов"  в виде текстовой строки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *