У меня есть поддомены, которые я хочу перенаправить на определенные порты на том же сервере. Скажи, что у меня есть
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:
Связанный вопрос: Перенаправление 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 слишком.