Как перенаправить различные запросы поддоменов на другой порт

17

У меня есть два приложения, один из них - 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 и выполняет необходимые перенаправления.

Как это сделать? Благодарю.     

задан Graviton 26.02.2009 в 07:29
источник
  • Умммм ... ПОЧЕМУ? Вы знаете о виртуальном хостинге на основе имени? –  derobert 26.02.2009 в 07:48
  • Прикомандировано @ derobert's «почему». Пожалуйста, объясни. –  matpie 26.02.2009 в 08:23
  • Я обновил вопрос, извините за не поставил хороший вопрос в первую очередь –  Graviton 26.02.2009 в 08:26
  • , когда вы говорите, что перенаправление в блог, вы имеете в виду перенаправление на blog.example.com (blog.example.com появляется в адресной строке)? Если это так, вам не нужен обратный прокси-сервер, просто создайте запись DNS для www.example.com, чтобы указать на первую машину и blog.example.com на вторую машину –  vladr 27.02.2009 в 06:08

5 ответов

35

Я предполагаю, что у вас есть своя причина для того, чтобы обе страницы ( 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>
    
ответ дан vladr 26.02.2009 в 08:12
источник
  • FYI, это отлично подходит для работы с несколькими сайтами. Я использую Visual Studio, и он настроен на работу со встроенным сервером, для которого требуются номера портов. Если вы настроите свои проекты на использование статических портов, вы можете установить apache и использовать эту конфигурацию, чтобы указать домен на эти порты, переместить домены в ваш файл hosts и voila, названные сайты, которые указывают на разные порты на вашем локальном машины, но имеют читаемые имена. Очень удобно. –  jvenema 30.04.2009 в 15:41
  • В окнах мне также пришлось включить mod_proxy_http, прежде чем это сработает. –  Kato 20.06.2012 в 01:52
  • linux use sudo a2enmod proxy_http И помните о предупреждении о безопасности для прокси-серверов на сайте Apache httpd.apache.org/docs/2.2/mod/mod_proxy.html#access –  Lex 18.06.2013 в 07:11
5

Я использую прокси-сервер для этого типа вещей.

В моем примере у меня есть 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>
    
ответ дан Glavić 26.02.2009 в 08:19
источник
2

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

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
    
ответ дан M A K Ripon 18.01.2016 в 10:33
источник
  • Я предполагаю, что «sudo a2enmod subdomain.domain.com.conf» должен быть «sudo a2ensite subdomain.domain.com.conf» здесь, поскольку нам нужно включить сайт subdomain.domain.com.conf (а не модуль). –  Rahul Bhooteshwar 24.03.2016 в 06:38
0

Сверху моей шляпы:

Listen 82
Listen 83
NameVirtualHost 1.2.3.4 # Use your server's IP here

<VirtualHost www.myexample.com:82>
# Configure www.myexample.com here
</VirtualHost>

<VirtualHost blog.myexample.com:83>
# Configure blog.myexample.com here
</VirtualHost>
    
ответ дан Rytmis 26.02.2009 в 07:41
источник
0

Более полным ответом на это было бы сделать что-то вроде этого, что позволит вам установить прокси-шлюз, что и было описано выше.

    Имя_сервера 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/

    

ответ дан Lionel Morrison 04.04.2013 в 17:17
источник
  • Что такое «ProxyPassReverseCookiePath»? –  Gabor Peto 13.08.2013 в 17:06