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


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

dev.mydomain.com 

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

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

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

Это для сервера разработки интрасети, который имеет немаршрутизируемый ip   адрес, поэтому я не очень обеспокоен эксплойтами и безопасностью, которые   будет скомпрометировать публичный сервер.


58
2017-10-28 00:57


Источник




Ответы:


Решение

Вот что я, наконец, придумал после того, как Майлз Эриксон был настроен в правильном направлении. Я хотел, чтобы адресная строка отражала исходный субдомен / домен запроса, а не перенаправляемый сервер и порт, но он поставил меня на правильный путь к 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>

61
2017-10-28 15:36



Имейте в виду, что для всех, кому этот ответ не помог, вы должны включить моды mod_proxy так же как proxy_http, - matewka


Предполагая, что 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 а также NameVirtualHost
  3. переадресовывать

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

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


9
2017-10-28 01:18



см. мой собственный ответ на то, что я на самом деле использовал, и это идея VirtualHost с mod_proxy, чтобы сохранить исходный хост вместо того, чтобы делать перенаправление. Это внутренний сервер, поэтому я не заинтересован в безопасности или эксплойтах mod_proxy. - Jarrod Roberson
Нашел множество других предложений, но это в конечном итоге сработало для меня в Windows Server 2008 R2 / Apache 2.2.25. - HPWD
Проблема с этим решением заключается в том, что у вашего брата вы не остаетесь в первом домене, вы получаете 302 секунды. - Pleymor


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

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

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


6
2017-10-28 02:01



Это не перенаправление; он проксирует соединение. Включение mod_proxy может быть чрезвычайно легко использовать, если вы не очень тщательно настраиваете его. Я бы очень рекомендовал против этого. - Chris S
Он не хочет перенаправления, как и его ОП. Он хочет, чтобы исходный URL-адрес оставался в адресной строке; это означает использование mod_proxy или mod_rewrite, и лучше избегать mod_rewrite. - adaptr


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

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

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

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


2
2017-10-28 00:59



Это неверно. mod_rewrite следует использовать только в качестве последнего средства, когда ничего другого делать не будет. Редиректные и прокси-решения, приведенные, намного превосходят этот (и почти любой другой мыслимый) случай. - adaptr
@adaptr Это делает перенаправление, я не вижу, как любые другие перенаправления «намного превосходят». И предположим, что он настроил прокси-сервер, когда у него явно нет четкого понимания Apache / Security / Performance / etc, это серьезно? - Chris S
Я нахожусь на общем хостинге. Переписывание - единственный вариант. Я могу создать файл .htaccess, но не прокси-сервер или виртуальный хост. - abalter


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

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

2
2018-01-18 09:29



Есть ли существенное различие между этим и принятым ответом? - kasperd
Большинство людей забывают добавить sudo a2enmod proxy_http поэтому они сталкиваются с трудностями при правильной работе. Также я стараюсь дать полный процесс от начала до конца в последовательности, чтобы помочь более аккумулировать. Спасибо за ваш вопрос. - M A K Ripon
+1 из-за упоминания «ProxyRequests Off» - Sebastian
Это просто не работает для меня. 'sudo a2enmod subdomain.domain.com.conf' говорит: "ОШИБКА: Модуль x.y.z не существует!" Следует ли это указывать в конфигурации «по умолчанию»? - Dirk Schumacher
Коррекция при регистрации субдомена sudo a2ensite sub.yourdomain.com - Ali Azhar