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

как мы можем запустить несколько приложений с разными доменами и номерами портов в apache

У меня на сервере работают два приложения с доменами

 x.abc.com
 admin.x.abc.com

x.abc.com is running on port 80
admin.x.abc.com is running on port 8080

Я могу получить доступ к x.abc.com из браузера, но когда я пытаюсь использовать admin.x.abc.com, он отправляет запросы только на x.abc.com.

Как правильно настроить два разных веб-приложения с разными доменами и портами на одном компьютере. Ниже перечислены мои файлы виртуального хоста для x.abc.com и admin.x.abc.com соответственно

<VirtualHost *:80>
    ServerName www.x.abc.com
    ServerAlias x.abc.com
    RailsEnv test
    DocumentRoot /home/cp/cp/public
   <Directory /home/cp/cp/public/>
   </Directory>
   LogLevel warn
   ErrorLog /home/cp/cp/log/error.log
   CustomLog /home/cp/cp/access.log combined
   RewriteCond %{HTTP_HOST} ^admin.x.abc.com
   RewriteRule (.*) http://localhost:8080/$1 [R=301,L]
</VirtualHost>

<VirtualHost *:8080>
    ServerName www.admin.x.abc.com
    ServerAlias admin.x.abc.com
    RailsEnv test
    DocumentRoot /home/cp/cp_admin/public
   <Directory /home/cp/cp_admin/public/>
   </Directory>
   LogLevel warn
   ErrorLog /home/cp/cp_admin/log/error.log
   CustomLog /home/cp/cp_admin/access.log combined
 </VirtualHost>

Вы можете добавить несколько VirtualHost директивы для одного порта. Apache обработает их по именам, т.е. ServerNameи ServerAlias. Обратите внимание, что по умолчанию Apache использует первый VirtualHost настроен, если совпадений не найдено. Следующая конфигурация должна работать.

<VirtualHost *:80>
    ServerName www.admin.x.abc.com
    ServerAlias admin.x.abc.com
    ...
</VirtualHost>

<VirtualHost *:80>
    ServerName www.x.abc.com
    ServerAlias x.abc.com
    ...
</VirtualHost>

Ваш конфиг вроде хорош. Попробуйте следующее:

  1. Вы используете домены или IP? Если он не находит виртуальный хост, о котором вы говорите, он будет обслуживать первый виртуальный хост. В данном случае www.x.abc.com. Это независимо от порта.
  2. Попробуйте добавить Слушай 8080 директива. У вас должны быть и Listen 80, и Listen 8080.

Похоже, что может происходить следующее: (1) весь трафик обрабатывается через порт 80, а затем (2) ServerAlias x.abc.com соответствует (и используется для) admin.x.abc.com. Обратите внимание, из Документация Apache относительно соответствия:

Виртуальные хосты на основе имен для наиболее подходящего набора <virtualhost>s обрабатываются в том порядке, в котором они появляются в конфигурации. Первое совпадение ServerName или ServerAlias используется без разницы в приоритете для подстановочных знаков (а также для ServerName и ServerAlias).

Это разрешается после добавления строки ниже в httpd.conf

NameVirtualHosts *:80