Как создать временную и постоянную переадресацию с помощью 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
или вашего любимого текстового редактора:
- 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
:
- 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
или вашего любимого текстового редактора:
- 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
:
- sudo systemctl restart nginx
Вы можете расширить эту конфигурацию многими другими способами. Использование этих основ Nginx для создания желаемой конфигурации сервера может сделать ваш стек очень компактным, а также помочь в кратком документировании и обработке любых потенциальных пограничных случаев, связанных с трафиком вашего сервера.
Заключение
В этом руководстве вы научились настраивать как временные, так и постоянные перенаправления для популярных веб-серверов. Обязательно используйте правильный тип перенаправления, так как неправильное использование временных перенаправлений может повредить вашему поисковому рейтингу.
Правильное использование перенаправлений позволит вам использовать свое текущее присутствие в Интернете, а также позволит вам изменить структуру вашего сайта по мере необходимости. Если вы хотите узнать больше о настройке перенаправлений в Nginx, вы можете прочитать Как создавать временные и постоянные перенаправления с помощью Nginx.