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

标签 web-applications configuration apache2

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

我想让两个站点在一个 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/

相关文章:

javascript - 创建一个可以离线工作、存​​储数据然后在在线时将其同步到远程 MySQL 的 Web 应用程序?

python - 如何配置 Django、PostgreSQL、Apache 和 Python?

perl - 如何让 Perl::Critic 在其输出中显示违规策略?

mysql - Nginx CodeIgniter无法正常工作

regex - Ubuntu 18 Apache .htaccess 使用通配符重写到其他目录 - 美化 URL

javascript - Javascript Web 应用程序的最佳解决方案

java - 不意味着在更改 JSP 页面时重新部署_WHOLE_应用程序的任何使用 Eclipse WTP 的方式

javascript - Yelp鼠标追踪机制

django - 致命的 Python 错误 : PyEval_AcquireThread

apache2 - Munin、apache 以及如何密码保护 munin