Назад | Перейти на главную страницу

Как перенаправить поддомены на другой порт того же сервера?

У меня есть поддомены, которые я хочу перенаправить на определенные порты на том же сервере. Скажи, что у меня есть

dev.mydomain.com 

я хочу dev.mydomain.com прозрачно перенаправить на mydomain.com:8080 и я хочу сохранить исходное имя субдомена URL-адрес браузера.

Как мне это сделать с Apache 2.2? У меня Apache 2.2 работает на порте по умолчанию 80. Я не могу понять конфигурацию записи, чтобы это произошло.

Я уже настроил dev.mydomain.com разрешить в DNS в mydomain.com.

Это для сервера разработки интрасети, который имеет немаршрутизируемый IP-адрес, поэтому меня не так беспокоят эксплойты и безопасность, которые могут поставить под угрозу общедоступный сервер.

Решение

Вот что я наконец придумал после того, как Майлз Эриксон указал мне правильное направление. Я хотел, чтобы адресная строка отражала исходный субдомен / домен запроса, а не перенаправленный сервер и порт, но он направил меня на правильный путь к Google, чтобы найти решение, используя VirtualHost и я наконец нашел решение, которое включало использование mod_proxy.

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>

Запустите следующую строку на терминале (правильно укажите свой домен и имя поддомена)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

Вставьте следующий код и измените его по своему усмотрению

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

Запустите следующие строки на терминале (правильно укажите свой домен и имя поддомена)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

Предполагая, что dev.mydomain.com можно преобразовать в IP-адрес mydomain.com, вы можете добавить в свой httpd.conf следующее:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

Соответствующая документация Apache:

  1. Руководство по созданию виртуальных хостов на основе имен
  2. Ядро, включая VirtualHost и ИмяVirtualHost
  3. Перенаправить

Связанный вопрос: Перенаправление Apache на основе имени хоста

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

Добавьте в свою основную конфигурацию vhost следующие строки:

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

Обратите внимание, что для этого требуется mod_proxy на Apache.

Вы ищете mod_rewrite. Вот ссылка на документацию Apache который включает множество примеров для основной и продвинутый конфигурации ..

И если вы не можете самостоятельно интерпретировать документацию, попробуйте добавить это в httpd.conf:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

И если это непонятный пример, вот ссылка на руководство для начинающих по mod_rewrite слишком.