Как перенаправить различные запросы поддонов на другой порт
У меня есть два приложения: один - www.myexample.com
, другой - blog.myexample.com
. Я использую PHP и Apache.
Теперь я хочу, чтобы www.myexample.com
выполнялся на порту 82 моей машины и blog.myexample.com
на порту 83, на том же компьютере. Как настроить сценарии apache и/или PHP, чтобы при правильном обслуживании запросов на запросы?
Редактировать: Спасибо всем, кто отвечает, но я боюсь, что я не понимаю вопрос - мой плохой!
То, что я действительно хочу, - это имитировать условие, при котором сайты www.myexample.com и blog.myexample.com находятся на разных машинах. Поэтому, когда приходит запрос, сервер шлюза (тот, который также размещает сайт www.myexample.com) проверяет, является ли это запросом для www.myexample.com или для blog.myexample.com и выполняет необходимые перенаправления.
Как это сделать? Благодарю.
Ответы
Ответ 1
Я предполагаю, что у вас есть собственная причина для того, чтобы обе страницы (www
и blog
) запускались на разных портах - и в разных процессах. Если это не то, что вы намеревались, например. вы не хотели иметь два разных процесса, тогда разные порты могут быть не такими, какие вы планировали: вместо этого используйте VirtualHost
, чтобы совместно разместить два домена в одном и том же экземпляре apache + php на порту 80. В противном случае прочитайте.
Предполагая, что у вас есть два процесса apache + php, которые прослушиваются на localhost: 82 и localhost: 83 соответственно, вызывают третий, только Apache-процесс, чтобы действовать как обратный прокси. Попросите обратный прокси-сервер apache прослушивать запросы, поступающие на порт 80 из Интернета, с двумя определениями виртуального хоста. Первое определение виртуального хоста www
отправило бы запросы на localhost: 82, тогда как второе определение виртуального хоста blog
отправило бы запросы locahost: 83, например:
NameVirtualHost *:80
# www
<VirtualHost *:80>
ServerName www.myexample.com
ProxyPass / http://localhost:82/
ProxyPassReverse / http://localhost:82/
</VirtualHost>
# blog
<VirtualHost *:80>
ServerName blog.myexample.com
ProxyPass / http://localhost:83/
ProxyPassReverse / http://localhost:83/
</VirtualHost>
Ответ 2
Я использую прокси-сервер для этого типа вещей.
В моем примере у меня есть apache 1.3, работающий на порту 80, но мне нужен репозиторий svn для запуска на apache 2.2, и я не хотел набирать: 82 в конце домена каждый раз. Поэтому я сделал перенаправление прокси-сервера на apache 1.3 (порт 80):
<VirtualHost *:80>
ServerName svn.mydomain.com
ServerAlias svn
ServerAdmin [email protected]
<IfModule mod_proxy.c>
ProxyPass / http://svn:82/
</IfModule>
</VirtualHost>
Ответ 3
Запустите следующую строку на терминале (правильно укажите домен и поддомен)
sudo nano /etc/apache2/sites-available/subdomain.domain.com.conf
Вставьте следующий код и измените его в качестве требования
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName subdomain.domain.com
ServerAlias subdomain.domain.com
ProxyRequests Off
#ProxyPass / http://localhost:8080/
<Location />
ProxyPreserveHost On
ProxyPass http://domain.com:8080/
ProxyPassReverse http://domain.com:8080/
</Location>
# Uncomment the line below if your site uses SSL.
#SSLProxyEngine On
</VirtualHost>
Запустите следующие строки на терминале (правильно укажите домен и имя поддомена)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod subdomain.domain.com.conf
sudo service apache2 restart
Ответ 4
Сверху моей шляпы:
Listen 82
Listen 83
NameVirtualHost 1.2.3.4 # Use your server IP here
<VirtualHost www.myexample.com:82>
# Configure www.myexample.com here
</VirtualHost>
<VirtualHost blog.myexample.com:83>
# Configure blog.myexample.com here
</VirtualHost>
Ответ 5
Более полным ответом на это было бы сделать что-то вроде этого, что позволит вам установить прокси-шлюз, что и было описано выше.
Имя_сервера localhost
<Proxy *>
Order deny,allow
Allow from localhost
</Proxy>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:10081/
ProxyPassReverse / http://localhost:10081/
ProxyPassReverseCookiePath / http://localhost:10081/