Как запустить несколько сайтов на одном экземпляре apache
Отправленные часы идут в кругах после каждого руководства, которое я могу найти в сети.
Я хочу иметь два сайта, работающих на одном экземпляре apache, что-то вроде этого -
192.168.2.8/site1
а также
192.168.2.8/site2
Я крутился по кругу, но на данный момент у меня есть два файла conf в доступных "сайтах" (символически привязанных к сайтам), которые выглядят так:
<VirtualHost *:2000>
ServerAdmin [email protected]
ServerName site1
ServerAlias site1
# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/
# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/
Options +ExecCGI
# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined
</VirtualHost>
и
<VirtualHost *:3000>
ServerAdmin [email protected]
ServerName site2
ServerAlias site2
# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/
# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/
Options +ExecCGI
# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined
</VirtualHost>
http.conf выглядит так:
NameVirtualHost *:2000
NameVirtualHost *:3000
В настоящий момент Im получает эту ошибку -
[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results
Ports.conf выглядит так: (хотя ни один из руководства не упомянул о необходимости редактировать это)
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Может ли кто-нибудь дать несколько простых инструкций для этого? Каждый найденный вами гид говорит, что он делает это по-другому, и каждый из них приводит к различным ошибкам. Я, очевидно, что-то делаю неправильно, но не нашел ясного объяснения того, что может быть.
Просто выберите один сайт, доступный на порту 2000, а другой доступный на порт 3000 (или что-то еще, просто выберите те порты для проверки).
Im работает сервер Ubuntu 12.04...
=============
ИЗМЕНИТЬ
Следующее другое "руководство"...
Теперь я установил это на доступных сайтах:
<VirtualHost *:80>
DocumentRoot "/home/user/site1/"
ServerName 192.168.2.10/site1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/site2/"
ServerName 192.168.2.10/site2
</VirtualHost>
Установили это в apache2.conf:
ServerName site1
ServerName site2
Добавьте это к ports.conf:
Listen 192.168.2.10:80
==============
ИЗМЕНИТЬ
Теперь он работает, я помещал это в файл conf с поддержкой сайта:
<VirtualHost *:81>
DocumentRoot "/home/user/site1/"
ServerName site1
</VirtualHost>
<VirtualHost *:82>
DocumentRoot "/home/user/site2/"
ServerName site2
</VirtualHost>
У меня это в ports.conf:
Listen *:80
Listen *:81
Listen *:82
У меня это в apache2.conf:
ServerName site1
ServerName site2
Я не нашел это в каких-либо руководствах, которые я только что получил, работая через целый день проб и ошибок, поэтому я не знаю, является ли это хорошим решением. Но это по крайней мере работает, как я хочу это сейчас.
Ответы
Ответ 1
Ваш вопрос смешивает несколько разных понятий. Вы начали с того, что хотите запускать сайты на одном сервере с использованием одного и того же домена, но в разных папках. Это не требует специальной настройки. После того, как вы запустите единый домен, вы просто создаете папки под этим docroot.
В соответствии с остальной частью вашего вопроса, что вы действительно хотите сделать, это запустить различные сайты на одном сервере с собственными именами доменов.
Лучшая документация, которую вы найдете по этой теме, - это виртуальный хост в руководстве apache.
Существует два типа виртуальных хостов: основанные на имени и IP. На основе имени вы можете использовать один IP-адрес, в то время как для IP-адресов требуется другой IP-адрес для каждого сайта. Основываясь на вашем описании выше, вы хотите использовать виртуальные хосты на основе имени.
Исходная ошибка, которую вы получали, была связана с тем, что вы использовали разные порты, чем строка NameVirtualHost
. Если вы действительно хотите, чтобы сайты обслуживались из портов, отличных от 80, вам нужно иметь запись NameVirtualHost
для каждого порта.
Предполагая, что вы начинаете с нуля, это намного проще, чем может показаться.
Первое, что вам нужно сделать, это сказать apache, что вы собираетесь использовать виртуальные хосты на основе имени.
NameVirtualHost *:80
Теперь, когда apache знает, что вы хотите сделать, вы можете настроить свои определения vhost:
<VirtualHost *:80>
DocumentRoot "/home/user/site1/"
ServerName site1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/site2/"
ServerName site2
</VirtualHost>
Обратите внимание, что вы можете запускать столько сайтов, сколько хотите, на одном и том же порту. Различия ServerName
достаточно, чтобы сказать Apache, который использовать vhost. Кроме того, директива ServerName
всегда является именем домена/хоста и никогда не должна включать путь.
Если вы решили запустить сайты на порту, отличном от 80, вам всегда нужно будет указать номер порта в URL-адресе при доступе к сайту. Поэтому вместо перехода http://example.com вам нужно перейти на http://example.com:81
Ответ 2
Да с Virtual Host вы можете иметь столько параллельных программ, сколько хотите:
Откройте
/etc/httpd/conf/httpd.conf
Listen 81
Listen 82
Listen 83
<VirtualHost *:81>
ServerAdmin [email protected]
DocumentRoot /var/www/site1/html
ServerName site1.com
ErrorLog logs/site1-error_log
CustomLog logs/site1-access_log common
ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/"
</VirtualHost>
<VirtualHost *:82>
ServerAdmin [email protected]
DocumentRoot /var/www/site2/html
ServerName site2.com
ErrorLog logs/site2-error_log
CustomLog logs/site2-access_log common
ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/"
</VirtualHost>
<VirtualHost *:83>
ServerAdmin [email protected]
DocumentRoot /var/www/site3/html
ServerName site3.com
ErrorLog logs/site3-error_log
CustomLog logs/site3-access_log common
ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/"
</VirtualHost>
Перезапустить apache
service httpd restart
Теперь вы можете обратиться к Site1:
http://<ip-address>:81/
http://<ip-address>:81/cgi-bin/
Site2:
http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/
Site3:
http://<ip-address>:83/
http://<ip-address>:83/cgi-bin/
Если путь не жестко закодирован в любом script, тогда ваши веб-сайты должны работать без проблем.