无论我查看了多少教程和资源,我一直试图彻夜不眠,但没有成功。
我的目标是能够在运行的apache服务器上访问两个不同的网站。
最终目标是这样的(使用本地IP);
192.168.1.8/site1 - >第一个网站 192.168.1.8/site2 - >第二个网站
我在httpd.conf中包含了以下内容
<VirtualHost *:80>
DocumentRoot "/root/sites/site1"
ServerName site1
</VirtualHost>
<VirtualHost *:80>
ServerName site2
DocumentRoot "/root/sites/site2"
</VirtualHost>
值得一提的是,默认的DocumentRoot和Directory设置仍在http.conf中,实际上指向了site1文件。
转到192.168.1.8会将我带到site1(从http.conf中的DocumentRoot设置猜测)
转到/ site1或/ site2都会给我404 Not Found
我已经运行-S来查看任何问题,但据我所知它看起来很好;
VirtualHost configuration:
*:80 is a NameVirtualHost
default server site1 (/usr/local/etc/apache24/httpd.conf:244)
port 80 namevhost site1 (/usr/local/etc/apache24/httpd.conf:244)
port 80 namevhost site2 (/usr/local/etc/apache24/httpd.conf:248)
ServerRoot: "/usr/local"
Main DocumentRoot: "/usr/local/www/apache24/data"
Main ErrorLog: "/var/log/httpd-error.log"
Mutex default: dir="/var/run/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/var/run/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www" id=80
Group: name="www" id=80
有人能发现任何我错过的明显事物吗?
答案 0 :(得分:0)
NameVirtualHosts旨在按名称访问,而不是通过IP地址访问。使用您的配置,您已告诉Apache侦听到主机名“site1.example.com”和“site2.example.com”的传入连接(将您自己的域名替换为“example.com”)
如果没有名称来区分它们,则不能让两个虚拟主机侦听相同的IP地址和相同的端口。当你转到http://192.168.1.8时,Apache无法知道你是否打算访问site1或site2。因此它会将您发送到匹配的第一个主机,这是配置中的第一个<VirtualHost *:80>
。然后它会收到您对/site1
的请求,并将其附加到第一个VirtualHost的DocumentRoot。但由于您没有/root/sites/site1/site1
目录,因此会出现404错误。
有几种选择。
您可以在两个不同的端口上运行两个VirtualHost。
<VirtualHost *:80>
DocumentRoot "/root/sites/site1"
...
</VirtualHost>
<VirtualHost *:8080>
DocumentRoot "/root/sites/site2"
...
</VirtualHost>
或者,您可以只拥有一个包含单个文档根目录的网站:
DocumentRoot "/root/sites"
然后只构建您的文件系统,以便site1的内容位于/root/sites/site1
下的site2和/root/sites/site2
下的site2。然后,网址http://192.168.1.8/site1
和http://192.168.1.8/site2
将自动生效。
您可能也可以制定一些mod_rewrite
规则,但这会变得更加复杂。