如何在一个Apache实例上运行多个站点

在网上find的每一个指南之后,花了几个小时进入圈子。

我想有两个站点运行在一个单一的Apache实例,像这样 – 192.168.2.8 / site1和192.168.2.8 / site2

我一直在围绕着,但目前我有两个conf文件在'sites-available(符号链接到网站启用)'看起来像这样 –

<VirtualHost *:2000> ServerAdmin webmaster@site1.com 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 webmaster@site2.com 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 

目前我收到这个错误 –

 [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> 

任何人都可以给一些简单的指示,让这个运行? 我发现的每一个指南都是以不同的方式去做,每一个都会导致不同的错误。 我显然做错了什么,但没有find明确的解释。

只需要一个站点可以在2000端口上访问,另一个站点可以在3000端口上访问(或者其他的,只需select那些端口来testing)。

我正在运行Ubuntu服务器12.04 …

=============

编辑

跟着另一个“指南”…

我现在已经在网站上提供了这个function:

 <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 

我没有在任何指南中find这一点,我只是通过一整天的试验和错误工作,所以我不知道这是一个很好的解决scheme。 但是现在至less我正在努力工作。

你的问题是混合几个不同的概念。 你开始说,你想在同一个服务器上使用相同的域,但在不同的文件夹中运行网站。 这不需要任何特殊的设置。 一旦你得到单个域名运行,你只需在该文件根目录下创build文件夹。

基于你的问题的其余部分,你真正想要做的是在同一台服务器上运行各自的站点和自己的域名。

您将在主题中find的最佳文档是apache手册中的虚拟主机文档。

有两种types的虚拟主机:基于名称和基于IP的。 基于名称可以使用单个IP地址,而基于IP的每个站点需要不同的IP地址。 根据您的描述,您想要使用基于名称的虚拟主机。

你得到的最初的错误是由于你使用了不同于NameVirtualHost行的端口。 如果您确实希望从80以外的端口提供站点,则需要为每个端口设置一个NameVirtualHost条目。

假设你从头开始,这比看起来简单得多。

你需要做的第一件事是告诉Apache你将使用基于名字的虚拟主机。

 NameVirtualHost *:80 

现在,Apache知道你想做什么,你可以设置你的虚拟主机定义:

 <VirtualHost *:80> DocumentRoot "/home/user/site1/" ServerName site1 </VirtualHost> <VirtualHost *:80> DocumentRoot "/home/user/site2/" ServerName site2 </VirtualHost> 

请注意,您可以在同一个端口上运行尽可能多的站点。 不同的ServerName足以告诉Apache使用哪个虚拟主机。 此外, ServerName指令始终是域名/主机名称,不应包含path。

如果您决定在80以外的端口上运行网站,则在访问网站时,您必须始终在url中包含端口号。 所以,而不是去http://example.com你必须去http://example.com:81

是的,虚拟主机,你可以有任意多的并行程序,只要你想要的:

打开

/etc/httpd/conf/httpd.conf中

 Listen 81 Listen 82 Listen 83 <VirtualHost *:81> ServerAdmin webmaster@site1.com 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 webmaster@site2.com 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 webmaster@site3.com 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/ 

如果path没有在任何脚本中硬编码,那么你的网站应该无缝工作。