Поиск по сайту:

Как создать временную и постоянную переадресацию с помощью Apache и Nginx


Введение

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

Когда вы создаете контент и администрируете серверы, вам часто приходится перенаправлять трафик из одного места в другое. В этом руководстве обсуждаются различные варианты использования этих методов и способы их реализации в Apache и Nginx, двух наиболее распространенных веб-серверах.

Предпосылки

  • Сервер Ubuntu 20.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 20.04, включая пользователя без полномочий root и брандмауэр.
  • На вашем сервере установлен Apache или Nginx, что вы можете сделать, следуя инструкциям по установке Nginx в Ubuntu 20.04. И Apache, и Nginx могут быть установлены одновременно, и многие стеки используют оба сервера одновременно, но по умолчанию они будут конфликтовать на портах HTTP/HTTPS по умолчанию 80 и 443. , поэтому, если вы следуете этому руководству на стандартной конфигурации сервера, вам следует устанавливать только по одному.

Шаг 1. Просмотр методов перенаправления

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

Часто бывает полезно зарегистрировать несколько вариантов имени, чтобы пользователи могли вводить адреса, похожие на ваш основной домен. Например, если у вас есть домен с именем myspiders.com, вы также можете купить доменные имена для myspiders.net и myspiders.org и перенаправьте их обоих на ваш сайт myspiders.com. Это позволяет вам поймать пользователей, которые могут пытаться попасть на ваш сайт с неправильным адресом. Это также может помочь предотвратить использование другим сайтом аналогичного домена и получение прибыли от вашего присутствия в Интернете.

Иногда бывает необходимо изменить названия страниц, которые уже были опубликованы и получили трафик на вашем сайте. Обычно это приводит к ошибке 404 Not Found или, возможно, к другой ошибке в зависимости от ваших настроек безопасности. Этого можно избежать, перенаправляя посетителей на другую страницу, содержащую правильный контент, к которому они пытались получить доступ. Существует несколько различных видов перенаправления URL, каждый из которых означает что-то свое для клиентского браузера. Двумя наиболее распространенными типами являются временная переадресация 302 и постоянная переадресация 301.

Временные перенаправления

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

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

Постоянные перенаправления

Постоянные перенаправления полезны, когда ваш контент был перемещен в новое место навсегда.

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

Принудительный SSL

Обычно перенаправления используются для направления всего трафика сайта на использование SSL вместо стандартного HTTP.

Используя перенаправления, можно сделать так, чтобы все запросы на http://www.mysite.com перенаправлялись на https:/ /www.mysite.com. Использование LetsEncrypt для предоставления HTTPS автоматически создаст такую конфигурацию перенаправления.

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

Шаг 2 – Как перенаправить в Apache

Apache может перенаправлять с помощью нескольких различных инструментов. Простые перенаправления можно реализовать с помощью инструментов из модуля mod_alias, а более сложные перенаправления можно создать с помощью mod_rewrite.

Использование директивы перенаправления

В Apache вы можете реализовать одностраничные перенаправления с помощью директивы \Redirect, которая включена в модуль mod_alias, включенный по умолчанию. Эта директива принимает как минимум два аргумента: старый URL и новый URL-адрес.

Блоки сервера Apache можно хранить в основном файле настроек Apache в /etc/apache2/apache2.conf, но их легче поддерживать, если вы создадите новый файл в /etc/apache2/sites- доступно/ для каждой конфигурации. Соглашение Apache заключается в создании символических ссылок (например, ярлыков) из файлов в sites-available/ в другую папку с именем sites-available/, когда вы решите включить или отключить их. По умолчанию Apache устанавливается с единственной конфигурацией для конкретного сайта в /etc/apache2/sites-available/000-default.conf, которая включена и связана с /etc/apache2/sites-enabled/000-default.conf.

Вы можете открыть эту конфигурацию с помощью nano или вашего любимого текстового редактора:

  1. sudo nano /etc/apache2/sites-available/000-default.conf

По умолчанию он содержит стандартную конфигурацию веб-сервера, который будет прослушивать порт 80 и искать файл index.html, расположенный в /var/www/html в вашей системе.

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
</VirtualHost>

Если вместо этого вам нужно перенаправить запросы для domain1.com на domain2.com, вы можете удалить существующие директивы из этого блока сервера и заменить их постоянным перенаправлением:

<VirtualHost *:80>
	ServerName www.domain1.com
	Redirect / http://www.domain2.com
</VirtualHost>

<VirtualHost *:80>
	ServerName www.domain2.com
	. . .
	. . .
</VirtualHost>

Сохраните и закройте файл. Если вы используете nano, нажмите \Ctrl+X, затем, когда будет предложено, \Y и затем Enter.

Это перенаправление указывает браузеру направлять все запросы для www.domain1.com на www.domain2.com. Это только для одной страницы, а не для всего сайта.

По умолчанию директива Redirect устанавливает 302 или временную переадресацию. Если вы хотите создать постоянное перенаправление, вы можете сделать это одним из следующих двух способов:

<VirtualHost *:80>
	ServerName www.domain1.com
Redirect 301 /oldlocation http://www.domain2.com/newlocation
</VirtualHost>
<VirtualHost *:80>
	ServerName www.domain1.com
Redirect permanent /oldlocation http://www.domain2.com/newlocation
</VirtualHost>

Использование директивы RedirectMatch

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

Это позволит вам перенаправлять целые каталоги, а не только отдельные файлы.

RedirectMatch сопоставляет шаблоны в круглых скобках, а затем ссылается на соответствующий текст в перенаправлении, используя \$1, где 1 – первая группа текста. Последующим группам последовательно присваиваются номера.

Например, если вы хотите сопоставить каждый запрос чего-либо в каталоге /images с поддоменом с именем images.example.com, вы можете использовать следующее:

<VirtualHost *:80>
…
RedirectMatch ^/images/(.*)$ http://images.example.com/$1
…
</VirtualHost>

Как и в случае с директивой Redirect, вы можете указать тип перенаправления, добавив код перенаправления перед правилами размещения URL.

Чтобы ваши изменения вступили в силу, вам необходимо перезапустить Apache. На современном сервере Ubuntu это можно сделать с помощью systemctl:

  1. sudo systemctl restart apache2

Использование mod_rewrite для перенаправления

Самый гибкий, но сложный способ создания правил перенаправления — это модуль с именем mod_rewrite. Информацию о работе с mod_rewrite см. в разделе Как переписать URL-адреса с помощью mod_rewrite для Apache.

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

Шаг 3 — Как перенаправить в Nginx

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

Блоки сервера Nginx можно хранить в основном файле настроек Nginx в /etc/nginx/nginx.conf, но их легче поддерживать, если вы создадите новый файл в /etc/nginx/sites- доступно/ для каждой конфигурации. Соглашение Nginx заключается в создании символических ссылок (например, ярлыков) из файлов в sites-available/ в другую папку с именем sites-available/, когда вы решите включить или отключить их. По умолчанию Nginx устанавливается с единственной конфигурацией для конкретного сайта в /etc/nginx/sites-available/default, которая включена и связана с /etc/ nginx/sites-enabled/по умолчанию.

Вы можете открыть эту конфигурацию с помощью nano или вашего любимого текстового редактора:

  1. sudo nano /etc/nginx/sites-available/default

По умолчанию он содержит стандартную конфигурацию веб-сервера, который будет прослушивать порт 80 и искать файл index.html, расположенный в /var/www/html в вашей системе.

server {
        listen 80 default_server;
        listen [::]:80 default_server;
…
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
…
}

Если вместо этого вам нужно перенаправить запросы для domain1.com на domain2.com, вы можете удалить существующие директивы из этого блока сервера и заменить их постоянным перенаправлением:

server {
	listen 80;
	server_name domain1.com;
	return 301 $scheme://domain2.com$request_uri;
}

Сохраните и закройте файл. Если вы используете nano, нажмите \Ctrl+X, затем, когда будет предложено, \Y и затем Enter.

Директива return выполняет замену URL-адреса, а затем возвращает предоставленный ей код состояния и URL-адрес перенаправления.

В этом случае он использует переменную $scheme, чтобы использовать любую схему, использованную в исходном запросе (http или https). Затем он возвращает код постоянной переадресации 301 и вновь сформированный URL-адрес.

Чтобы обработать перенаправление папки на отдельный субдомен, вы можете выполнить операцию, аналогичную перенаправлению папки Apache, используя директиву rewrite. Эта директива, помещенная в блок сервера, вызовет временное перенаправление запросов внутри каталога images на поддомен images.example.com:

server {
…
rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
…
}

Для постоянного перенаправления вы можете изменить redirect на permanent в конце оператора.

Чтобы ваши изменения вступили в силу, вам необходимо перезапустить Nginx. На современном сервере Ubuntu это можно сделать с помощью systemctl:

  1. sudo systemctl restart nginx

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

Заключение

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

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