Перенаправление domain.com:3000 на порт 80 с помощью Apache

Вопрос или проблема

Я размещаю два приложения на своем веб-сервере: один сайт на Drupal, а другое — установка Errbit, что является приложением на Ruby on Rails. URL выглядят примерно так:

http://ourcompany.com
http://errbit.ourcompany.com:3000

Я хочу убрать необходимость в :3000 во втором URL, чтобы мы могли обращаться к нему напрямую через:

http://errbit.ourcompany.com

Я не хочу перенаправлять, я хочу, чтобы URL оставался без номера порта. Ранее я использовал следующие команды командной строки для изменения конфигурации IP-таблиц:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000 
sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 3000

…что работало нормально, так как на старом сервере не было Apache. Однако это вызовет переадресацию ВСЕХ запросов на порт 80 к порту 3000, что приведет к нарушению доступа к http://ourcompany.com

Как мне это настроить?

Можно ли это настроить через IP-таблицы, или это нужно делать в конфигурации Apache2?

<VirtualHost *:80>
ServerName errbit.ourcompany.com
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost> 

http://httpd.apache.org/docs/2.0/mod/mod_proxy.html

В соответствии с примером выше,
если вы используете WHM/cPanel и вам нужно, чтобы https://somedomain.com:3000 перенаправлялся на https://somedomain.com, добавьте фрагмент из примера Дэвида выше в

/etc/apache2/conf.d/userdata/ssl/2_4/user/domain.com/*.conf

Замените http://localhost:3000 на https://somedomain.com:3000
Пересоберите apache

/usr/local/cpanel/scripts/rebuildhttpdconf

и перезапустите apache

/usr/local/cpanel/scripts/restartsrv_httpd

Вам нужно будет убедиться, что https://somedomain.com имеет действительный сертификат TLS/SSL.

Ответ или решение

Чтобы решить задачу устранения номера порта в URL-адресе Ruby on Rails приложения Errbit, работающего на вашем веб-сервере, и чтобы доступ к нему осуществлялся через http://errbit.ourcompany.com вместо http://errbit.ourcompany.com:3000, необходимо использовать возможности веб-сервера Apache. В данном случае модуль мод_proxy станет основным инструментом для перенаправления запросов на нужный порт приложения.

Теория

Apache HTTP Server является одним из самых популярных веб-серверов в мире, предоставляющим множество инструментов для управления запросами и их обработкой. Один из таких инструментов — это модуль mod_proxy, который позволяет серверу Apache функционировать как прокси-сервер, перенаправляя запросы от одного сервера к другому. В комбинации с другими модулями, такими как mod_proxy_http, Apache может перенаправлять HTTP запросы на другие приложения, работающие на разных портах.

Пример

Для использования mod_proxy и настройки Apache таким образом, чтобы он перенаправлял запросы с порта 80 на порт 3000, можно создать виртуальный хост. Виртуальный хост позволяет Apache обслуживать несколько доменов и приложений на одном сервере.

Вот пример конфигурации виртуального хоста для решения вашей задачи:

<VirtualHost *:80>
    ServerName errbit.ourcompany.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Этот фрагмент конфигурации определяет виртуальный хост для домена errbit.ourcompany.com, перенаправляет все HTTP-запросы с порта 80 на локальный сервер порта 3000, где работает ваше приложение Errbit. Опции ProxyPreserveHost, ProxyPass и ProxyPassReverse обеспечивают сохранение исходного URL для клиента и корректную обработку обратных ссылок и заголовков.

Применение

Для реализации данного решения выполните следующие шаги:

  1. Установка нужных модулей Apache: Убедитесь, что модули mod_proxy и mod_proxy_http установлены и активированы. Для активации используйте команды:

    sudo a2enmod proxy
    sudo a2enmod proxy_http
  2. Конфигурация виртуального хоста: Откройте или создайте файл конфигурации для вашего виртуального хоста. Обычно файлы конфигурации виртуальных хостов располагаются в директории /etc/apache2/sites-available/ для дистрибутивов на базе Debian или Ubuntu. Создайте или отредактируйте файл, назовем его errbit.conf:

    sudo nano /etc/apache2/sites-available/errbit.conf

    Вставьте в него приведенную выше конфигурацию виртуального хоста.

  3. Активация виртуального хоста: Активируйте файл конфигурации командой:

    sudo a2ensite errbit.conf
  4. Перезапуск Apache: После активации конфигурации, перезапустите сервис Apache для применения изменений:

    sudo systemctl restart apache2
  5. Проверка конфигурации: Убедитесь, что Apache успешно перезапустился без ошибок. Это можно проверить командой:

    sudo apachectl configtest

Дополнительно рекомендуется убедиться, что ваш сервер может обработать HTTPS-запросы с использованием корректных TLS/SSL сертификатов, если вы планируете использовать HTTPS. Это можно сделать с помощью установки и настройки Let’s Encrypt или другого подходящего провайдера сертификатов.

Если у вас используется панель управления WHM/cPanel, можно внести изменения в следующие файлы, как это указано в описании:

/etc/apache2/conf.d/userdata/ssl/2_4/user/domain.com/*.conf

После этого нужно сбросить конфигурацию Apache и перезапустить его:

/usr/local/cpanel/scripts/rebuildhttpdconf
/usr/local/cpanel/scripts/restartsrv_httpd

Эти шаги должны помочь вам настроить вашу среду так, чтобы ваше приложение Errbit было доступно по адресу без указания порта: http://errbit.ourcompany.com.

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

Капча загружается...