Вопрос или проблема
Я размещаю два приложения на своем веб-сервере: один сайт на 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>
В соответствии с примером выше,
если вы используете 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 для клиента и корректную обработку обратных ссылок и заголовков.
Применение
Для реализации данного решения выполните следующие шаги:
-
Установка нужных модулей Apache: Убедитесь, что модули
mod_proxy
иmod_proxy_http
установлены и активированы. Для активации используйте команды:sudo a2enmod proxy sudo a2enmod proxy_http
-
Конфигурация виртуального хоста: Откройте или создайте файл конфигурации для вашего виртуального хоста. Обычно файлы конфигурации виртуальных хостов располагаются в директории
/etc/apache2/sites-available/
для дистрибутивов на базе Debian или Ubuntu. Создайте или отредактируйте файл, назовем егоerrbit.conf
:sudo nano /etc/apache2/sites-available/errbit.conf
Вставьте в него приведенную выше конфигурацию виртуального хоста.
-
Активация виртуального хоста: Активируйте файл конфигурации командой:
sudo a2ensite errbit.conf
-
Перезапуск Apache: После активации конфигурации, перезапустите сервис Apache для применения изменений:
sudo systemctl restart apache2
-
Проверка конфигурации: Убедитесь, что 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
.