按照我在网上可以找到的所有指南,我花了几个小时在圈子里转。
我想让两个站点在一个 apache 实例上运行,就像这样 -
192.168.2.8/site1
和
192.168.2.8/site2
我一直在兜圈子,但目前我在“可用站点(符号链接(symbolic link)到已启用站点)”中有两个 conf 文件,如下所示 -
<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>
任何人都可以给出一些简单的说明来让它运行吗?我发现的每一个指南都说要以不同的方式来做,每一个都会导致不同的错误。我显然做错了什么,但没有找到可能是什么的明确解释。
只希望一个站点可在端口 2000 上访问,而另一个站点可在端口 3000 上访问(或其他任何站点,只需选择这些端口进行测试)。
我正在运行 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
我在任何指南中都没有找到这个,我只是通过一整天的反复试验让它工作,所以我不知道这是否是一个好的解决方案。但它至少现在按照我想要的方式工作。
最佳答案
您的问题是混合了几个不同的概念。你开始说你想在同一台服务器上使用相同的域运行站点,但在不同的文件夹中。这不需要任何特殊设置。运行单个域后,您只需在该 docroot 下创建文件夹。
根据您的其余问题,您真正想要做的是在同一台服务器上使用自己的域名运行各种站点。
您可以找到关于该主题的最佳文档是 virtual host apache 手册中的文档。
有两种类型的虚拟主机:基于名称的和基于 IP 的。基于名称允许您使用单个 IP 地址,而基于 IP 要求每个站点使用不同的 IP。根据您上面的描述,您想使用基于名称的虚拟主机。
您遇到的最初错误是由于您使用的端口与 NameVirtualHost
不同。线。如果您真的希望从 80 以外的端口为站点提供服务,您需要有一个 NameVirtualHost
每个端口的条目。
假设您从头开始,这比看起来要简单得多。
如果您使用的是 2.3 或更早版本,您需要做的第一件事是告诉 Apache 您将使用基于名称的虚拟主机。
NameVirtualHost *:80
如果您使用的是 2.4 或更高版本,请不要添加 NameVirtualHost 行。 Apache 2.4 版 deprecated the
NameVirtualHost
directive ,它将在 future 的版本中删除。现在您的虚拟主机定义:
<VirtualHost *:80>
DocumentRoot "/home/user/site1/"
ServerName site1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/site2/"
ServerName site2
</VirtualHost>
您可以在同一个端口上运行任意数量的站点。
ServerName
不同就足以告诉 Apache 使用哪个虚拟主机。此外,ServerName
指令始终是域/主机名,并且永远不应包含路径。如果您决定在 80 以外的端口上运行站点,则在访问站点时必须始终在 URL 中包含端口号。所以不要去 http://example.com你必须去http://example.com:81
关于web-applications - 如何在一个 apache 实例上运行多个站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12339044/