Подтвердить что ты не робот

Как запустить несколько сайтов на одном экземпляре 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

Я не нашел это в каких-либо руководствах, которые я только что получил, работая через целый день проб и ошибок, поэтому я не знаю, является ли это хорошим решением. Но это по крайней мере работает, как я хочу это сейчас.

4b9b3361

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