web-applications - 如何在一个 apache 实例上运行多个站点

标签 web-applications configuration apache2

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

我想让两个站点在一个 apache 实例上运行,就像这样 - 192.168.2.8/站点1 和 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

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

最佳答案

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

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

有关该主题的最佳文档是 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 ,并将在未来版本中删除。

现在你的虚拟主机定义:

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

相关文章:

android - 如何操作 Phonegap Web SQL 数据库

tomcat - jenkins在哪里存储作业和节点配置

apache - a2ensite 的站点不存在错误

django - sudo apache2 stop 不起作用

backup - 网络应用程序的健全备份策略

java - Glassfish 未加载安全页面

javascript - 如何设置 ember-simple-google-maps 环境变量?

phpMyAdmin 返回空白/白页

java - AudioSystem 可以从 Java EE Web 应用程序访问吗?

windows - 全局应用程序设置应该存储在 Windows 7 上的什么位置?