50

按照我在网上可以找到的所有指南,我花了几个小时在圈子里转。

我想让两个站点在一个 apache 实例上运行,就像这样 - 192.168.2.8/site1 和 192.168.2.8/site2

我一直在兜圈子,但目前我在“可用站点(符号链接到启用站点)”中有两个 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…</p>

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

编辑

跟随另一个'指南'......

我现在已经在可用的站点中进行了设置:

<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

我在任何指南中都没有找到这个,我只是通过一整天的反复试验让它工作,所以我不知道这是否是一个好的解决方案。但它至少现在按照我想要的方式工作。

4

2 回答 2

72

您的问题是混合了几个不同的概念。你开始说你想在同一台服务器上使用相同的域运行站点,但在不同的文件夹中。这不需要任何特殊设置。运行单个域后,您只需在该 docroot 下创建文件夹。

根据您的其余问题,您真正想要做的是在同一台服务器上使用自己的域名运行各种站点。

您会在该主题上找到的最佳文档是 apache 手册中的虚拟主机文档。

有两种类型的虚拟主机:基于名称的和基于 IP 的。基于名称允许您使用单个 IP 地址,而基于 IP 要求每个站点使用不同的 IP。根据您上面的描述,您想使用基于名称的虚拟主机。

您收到的最初错误是由于您使用的端口与NameVirtualHost线路不同。如果您确实希望从 80 以外的端口为站点提供服务,则需要NameVirtualHost为每个端口创建一个条目。

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

如果您使用的是 2.3 或更早版本,您需要做的第一件事是告诉 Apache 您将使用基于名称的虚拟主机。

NameVirtualHost *:80

如果您使用的是 2.4 或更高版本,请不要添加 NameVirtualHost 行。Apache 2.4 版弃用了该NameVirtualHost指令,并将在未来的版本中将其删除。

现在您的虚拟主机定义:

<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

于 2012-09-09T21:42:17.613 回答
5

是的,使用虚拟主机,您可以拥有任意数量的并行程序:

打开

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

重启阿帕奇

service httpd restart

您现在可以参考 Site1 :

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/

站点2:

http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/

站点3:

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/

如果路径没有在任何脚本中硬编码,那么您的网站应该可以无缝运行。

于 2016-04-07T18:01:44.457 回答