Apache VirtualHost 不提供页面

Mal*_*ist 6 apache-http-server virtual-host

我有一个域名链接到我家里的IP地址。但是,我想使用相同的服务器/IP 来显示多个网站。

我无法让虚拟主机工作。

我的 conf.d/virtual.conf 是:

NameVirtualHost 192.168.10.151:80
Run Code Online (Sandbox Code Playgroud)

我的网站可用/www.mydomain.com 是:

Listen 80
<VirtualHost *>
        ServerAdmin     admin@mydomain.com
        ServerName      www.mydomain.com
        ServerAlias     mydomain.com

        #Indexes and Directory Root
        DirectoryIndex  index.html index.php
        DocumentRoot    /media/BigDisk/www/www.mydomain.com/

        # Log Files
        ErrorLog        /media/BigDisk/www/www.mydomain.com/logs/error.log
        CustomLog       /media/BigDisk/www/www.mydomain.com/logs/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

并且该站点是使用 a2ensite 启用的,并且 apache 重新加载,没有任何警告或错误,但是当我去时www.mydomain.com我什么也没得到(“哎呀!谷歌浏览器无法连接......”)。

我究竟做错了什么?

更新:重新启动 Apache 结果如下:

malfist@webhost:~$ sudo /etc/init.d/apache2 restart
[sudo] password for malfist:
 * Restarting web server apache2                                                                                                                       apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
Run Code Online (Sandbox Code Playgroud)

Red*_*ick 5

检查名称解析

首先使用nslookupdighost检查www.mydomain.com在你的路由器的静态外部IP地址分。

检查路由器配置

然后检查您的路由器是否配置了端口转发,以便将到达外部接口的端口 80 的请求转发到服务器私有 IP 地址的端口 80。

检查 ISP 限制

然后检查您的 ISP 的条款和条件是否允许您运行 HTTP 服务。某些 ISP 会阻止入站 HTTP 连接。

局域网 != 互联网

最后,请记住,如果您是在 LAN 内进行测试,您需要为 www.mydomain.com 使用不同的 IP 地址,您可以将其添加192.168.10.151 www.mydomain.com到您的主机文件中(例如/etc/hostsC:\WINDOWS\system32\drivers\etc\hosts)。正如 Malfist 在评论中指出的那样:如果路由器支持 NAT 反射,则没有必要。


更新:

检查 Apache 错误日志(所有这些)

“无法连接”表明存在基本 IP 连接问题,而不是 Apache vhost 配置问题。后者更有可能导致 404 或 500 的 HTTP 响应。如果请求到达 Apache,您应该在错误日志中看到一个条目。如果那里没有条目,则表明 Apache 没有收到任何请求。

跟进 Apache 报告的警告和错误

NameVirtualHost *:80 没有 VirtualHosts

查看常见的错误配置

多个 NameVirtualHost 行将产生“NameVirtualHost *:80 has no VirtualHosts”警告。不过,Apache 将忽略第二个指令并使用第一个定义的 NameVirtualHost 行。当一个人使用多个虚拟主机配置文件并且不明白您只需要定义一个特定的 NameVirtualHost 行时,这似乎会发生。如上所述,这可能发生在 debian ports.conf 文件中,尤其是在升级之后。

地址已在使用:make_sock:无法绑定到地址 0.0.0.0:80

其他一些程序已经在侦听端口 80。使用它netstat -anp来找出什么,然后停止它。

诊断工具

以太网嗅探器

我会在 Apache 服务器上使用网络嗅探器(例如 tcpdump 或 wireshark)来查看传入的 HTTP 请求正在到达 - 如果没有,那么您就知道这是 IP 连接问题。


更新 2:

获取

另一个好的诊断工具是在服务器上运行它

 wget --header="Host: www.mydomain.com" -O - http://localhost
Run Code Online (Sandbox Code Playgroud)

这是您应该看到的输出

[root@mybox 日志]# wget --header="Host: foo.bar" -O - http://localhost
--2011-09-01 18:56:08-- http://localhost/
解析本地主机... 127.0.0.1
连接到 localhost|127.0.0.1|:80... 已连接。
已发送 HTTP 请求,正在等待响应... 200 OK
长度:125 [文本/html]
保存到:`STDOUT'

 0% [ ] 0 --.-K/s <html>
 <头>
  <title>我的盒子</title>
 </头>
 <身体>
  <h1>我的盒子</h1>
  <p>没什么可看的,继续前进</p>
 </正文>
</html>
100%[======================================>] 125 --.-K/ s 为 0

2011-09-01 18:56:08 (10.8 MB/s) - '-' 保存 [125/125]

[root@mybox 日志]# tail -n 1 access_log
127.0.0.1 - - [01/Sep/2011:18:56:08 +0100] "GET / HTTP/1.0" 200 125 "-" "Wget/1.11.4 Red Hat modified"

添加-S选项以wget查看服务器的响应标头。

如果您收到诸如“连接被拒绝”之类的消息,则 Apache 未在侦听端口 80。

网络统计

的输出netstat -anp应包括

tcp        0      0 :::80        :::*       LISTEN      12345/httpd
Run Code Online (Sandbox Code Playgroud)