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

Web applications 如何在一个apache实例上运行多个站点,web-applications,configuration,apache2,Web Applications,Configuration,Apache2,我花了好几个小时在网上找到的每一个指南后面兜圈子 我想在一个apache实例上运行两个站点,类似这样- 192.168.2.8/站点1 和 192.168.2.8/站点2 我一直在兜圈子,但目前我在“站点可用(symlinked to sites enabled)”中有两个conf文件,看起来像这样- <VirtualHost *:2000> ServerAdmin webmaster@site1.com ServerName site1 ServerAlias site1 #

我花了好几个小时在网上找到的每一个指南后面兜圈子

我想在一个apache实例上运行两个站点,类似这样- 192.168.2.8/站点1 和 192.168.2.8/站点2

我一直在兜圈子,但目前我在“站点可用(symlinked to sites enabled)”中有两个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>
NameVirtualHost *:2000
NameVirtualHost *:3000
目前我得到了这个错误-

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results
Ports.conf看起来是这样的–(尽管没有指南提到需要编辑它)

已将其添加到ports.conf:

Listen 192.168.2.10:80
Listen *:80
Listen *:81
Listen *:82
==============

编辑 它现在可以工作了,我把它放在一个conf文件中,并启用了站点:

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

<VirtualHost *:82>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>
我在apache2.conf中有:

ServerName site1
ServerName site2
ServerName site1
ServerName site2

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

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

根据你剩下的问题,你真正想做的是在同一台服务器上用自己的域名运行不同的站点

关于这个主题,您可以找到的最好的文档是apache手册中的文档

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

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

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

如果您使用的是2.3或更早版本,那么首先需要告诉Apache您将使用基于名称的虚拟主机

NameVirtualHost *:80
如果您使用的是2.4或更高版本,请不要添加NameVirtualHost行。Apache的2.4版,它将在未来的版本中删除

现在,您的vhost定义:

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

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

DocumentRoot“/home/user/site1/”
服务器名站点1
DocumentRoot“/home/user/site2/”
服务器名站点2
您可以在同一端口上运行任意数量的站点。
ServerName
的不同足以告诉Apache使用哪个vhost。另外,
ServerName
指令始终是域/主机名,不应包含路径


如果您决定在80以外的端口上运行站点,则在访问站点时,必须始终在URL中包含端口号。因此,您不必转到,而必须转到

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

打开

/etc/httpd/conf/httpd.conf

地点2:

http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/
http://:82/
http://:82/cgi-bin/
地点3:

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

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

在我看来,您需要在NameVirtualHost中指定虚拟主机名。干杯,我已经尝试了很多类似的方法,您能更具体地说明我应该在其中添加什么吗?在一整天的努力之后,我终于找到了答案,哈哈。我感到精神疲惫,我要去睡觉了。我怀疑我的诡计多端的apache黑客解决方案是否会引起任何人的兴趣,但我会将其编辑到问题的结尾。但如果有人能提供更多关于这些问题的信息或解释,我会将其标记为答案……不知何故,我不能使用与live站点相同的子文件夹结构。在Apache中,顶级(sites menu)index.php文件对各个索引都有索引,文件位于子文件夹中。站点已加载,但单个站点的索引(php)在子文件夹中引用了它们的css或js,这不起作用。我需要将这些文件夹放在根级别,即“sites menu”index.php所在的位置。打乱了我的内容结构,但效果很好。现在我需要注意的是,我的项目不能有类似的文件夹名或类似的文件名。如果能有更好的解决方案,我们将不胜感激。请详细说明80号以外的港口的情况。我在实施这一点时真的感到困惑。:)@默认情况下,apache(和所有其他web服务器软件)侦听端口80上的连接。因此,浏览器被编码为在请求网站时连接到端口80。如果您在80以外的端口上运行网站,则用户在请求网站时必须始终包含端口号。我强烈建议您不要这样做。@accsharma如果您选择在80以外的端口上运行站点,则需要一个指定端口的名称VirtualHost行,然后是指定同一端口的VirtualHost容器。基本上,复制上面的内容,并用您打算运行站点的端口替换80。@bradym您好,很好奇在这里添加一个配置是可能的。如果我将nginx作为代理服务器,然后将其路由到apache2以显示请求的不同域,那么,我可以从同一虚拟主机运行两个python(wsgi)应用程序,还是需要在不同的端口上运行不同的apache?@piotao抱歉响应太晚。根据名称VirtualHost不再需要。
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>
http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/
http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/
http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/