我有一个与我家里的 IP 地址关联的域名。但是,我想使用同一个服务器/IP 来显示多个网站。
但我无法让虚拟主机工作。
我的conf.d/virtual.conf是:
NameVirtualHost 192.168.10.151:80
我的 sites-available/www.mydomain.com 是:
Listen 80
<VirtualHost *>
ServerAdmin [email protected]
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>
并且使用 a2ensite 启用了该网站,并且 apache 重新加载时没有任何警告或错误,但是当我访问时www.mydomain.com
我没有得到任何东西(“哎呀!Google Chrome 无法连接......”)。
我究竟做错了什么?
更新:重新启动 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.
答案1
检查名称解析
首先使用nslookup
或dig
或host
检查 www.mydomain.com 是否指向路由器的静态外部 IP 地址。
检查路由器配置
然后检查您的路由器是否已配置端口转发,以便到达外部接口端口 80 的请求被转发到服务器私有 IP 地址的端口 80。
检查 ISP 限制
然后检查您的 ISP 的条款和条件是否允许您运行 HTTP 服务。一些 ISP 会阻止入站 HTTP 连接。
LAN != 互联网
最后,请记住,如果您在 LAN 内进行测试,则需要为 www.mydomain.com 设置不同的 IP 地址,您可以将其添加192.168.10.151 www.mydomain.com
到 hosts 文件中(例如/etc/hosts
或C:\WINDOWS\system32\drivers\etc\hosts
)。正如 Malfist 在评论中指出的那样:如果路由器支持 NAT 反射,则没有必要这样做。
更新:
检查 Apache 错误日志(全部)
“无法连接”表示存在基本 IP 连接问题,而不是 Apache vhost 配置问题。后者更有可能导致 HTTP 响应 404 或 500。如果请求到达 Apache,您应该会在错误日志中看到一个条目。如果那里没有条目,则表明 Apache 没有收到任何请求。
跟踪 Apache 报告的警告和错误
NameVirtualHost *:80 没有 VirtualHosts
多个 NameVirtualHost 行将产生“NameVirtualHost *:80 没有 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
这是你应该看到的输出
[root@mybox 日志]# wget --header="主机: foo.bar" -O - http://localhost --2011-09-01 18:56:08-- http://localhost/ 正在解析本地主机...127.0.0.1 连接到本地主机|127.0.0.1|:80...已连接。 HTTP 请求已发送,正在等待响应...200 OK 长度:125 [text/html] 保存至:`STDOUT' 0% [ ] 0 --.-K/秒 <html> <头部> <title>我的盒子</title> </head> <主体> <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 已修改"
添加-S
选项以wget
查看服务器的响应头。
如果您收到“连接被拒绝”之类的信息,则表明 Apache 没有监听端口 80。
网络状态
输出netstat -anp
应该包括
tcp 0 0 :::80 :::* LISTEN 12345/httpd
答案2
NameVirtualHost *:80
这是在 中/etc/apache2/ports.conf
。如果你删除它或将其注释掉并重新启动 Apache,警告就会消失。
答案3
我花了几个小时才搞定,我所需要做的就是释放我的 ip 地址 ifconfig eth0 down。它变成了静态的,现在它可以识别我的虚拟主机名。