我可以在网上找到每个指南,花费数小时的时间。
我想在一个apache实例上运行两个站点,就像这样 - 192.168.2.8/site1 和 192.168.2.8/site2
我一直在圈子里,但目前我在'sites-available(符号链接到网站启用)'中有两个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
我没有在任何指南中找到这个,我只是通过整整一天的试验和错误,所以我不知道这是否是一个很好的解决方案。但它至少是我现在想要的方式。
答案 0 :(得分:69)
你的问题是混合了几个不同的概念。您开始说您希望使用相同的域在同一服务器上运行站点,但是在不同的文件夹中。这不需要任何特殊设置。一旦您运行单个域,您只需在该docroot下创建文件夹。
根据您提出的其余问题,您真正想要做的是使用自己的域名在同一台服务器上运行各种网站。
您将在该主题中找到的最佳文档是apache手册中的virtual host文档。
有两种类型的虚拟主机:基于名称和基于IP。基于名称允许您使用单个IP地址,而基于IP的每个站点需要不同的IP。根据您的上述说明,您希望使用基于名称的虚拟主机。
您获得的初始错误是由于您使用的端口不同于NameVirtualHost
行。如果您确实希望从80以外的端口提供站点,则每个端口都需要有NameVirtualHost
条目。
假设你是从头开始,这比看起来要简单得多。
您需要做的第一件事就是告诉apache您将使用基于名称的虚拟主机。
NameVirtualHost *:80
现在apache知道你想做什么,你可以设置你的vhost定义:
<VirtualHost *:80>
DocumentRoot "/home/user/site1/"
ServerName site1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/site2/"
ServerName site2
</VirtualHost>
请注意,您可以在同一端口上运行任意数量的站点。不同的ServerName
足以告诉Apache使用哪个vhost。此外,ServerName
指令始终是域/主机名,并且永远不应包含路径。
如果您决定在80以外的端口上运行站点,则在访问站点时,您始终必须在URL中包含端口号。因此,您不必前往http://example.com,而必须转到http://example.com:81
答案 1 :(得分:5)
是的,使用Virtual Host,您可以拥有任意数量的并行程序:
打开
/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>
重启apache
service httpd restart
您现在可以参考Site1:
http://<ip-address>:81/
http://<ip-address>:81/cgi-bin/
Site2:
http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/
Site3:
http://<ip-address>:83/
http://<ip-address>:83/cgi-bin/
如果路径未在任何脚本中进行硬编码,那么您的网站应无缝工作。