我想使用 DNS 别名来配置指向服务器上特定目录的一个域。
这是我所做的:
1)在域名设置中更改IP地址即可
$ ping www.example.com
PING example.com (124.205.62.xxx): 56 data bytes
64 bytes from 124.205.62.xxx: icmp_seq=0 ttl=48 time=53.088 ms
64 bytes from 124.205.62.xxx: icmp_seq=1 ttl=48 time=52.125 ms
^C
--- example.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 52.125/52.606/53.088/0.482 ms
2)添加 sites-available 和 sites-enabled
$ ls -l /etc/apache2/sites-available/
total 16
-rw-r--r-- 1 root root 948 2010-04-14 03:27 default
-rw-r--r-- 1 root root 7467 2010-04-14 03:27 default-ssl
-rw-r--r-- 1 root root 365 2010-06-09 18:27 example.com
$ ls -l /etc/apache2/sites-enabled/
total 0
lrwxrwxrwx 1 root root 26 2010-06-09 15:46 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 33 2010-06-09 18:17 001-example.com -> ../sites-available/example.com
但它不起作用,当我打开浏览器访问 www.example.com 时,它显示 111 错误:
The following error was encountered:
Connection to 124.205.62.48 Failed
The system returned:
(111) Connection refused
以下是 example.com 的配置方式:
$ cat /etc/apache2/sites-enabled/001-example.com
<virtualhost *:80>
DocumentRoot "/vhosts/example.com/htdocs/"
ServerName www.example.com
ServerAlias example.com
<Location />
Order Deny,Allow
Deny from None
Allow from all
</Location>
#Include /etc/phpmyadmin/apache.conf
ErrorLog /vhosts/example.com/logs/error.log
CustomLog /vhosts/example.com/logs/access.log combined
你能告诉我如何解决这个问题吗?
答案1
这是正确的基于名称的虚拟主机配置。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
答案2
尝试将此行添加到客户端计算机的 hosts 文件(/etc/hosts 或 C:\WINDOWS\System32\drivers\etc\hosts):
124.205.62.48 www,example.com
如果重新启动浏览器后,网站 www.example.com 可以正常运行,则问题与 DNS 有关,否则问题与 apache 有关(检查系统和 apache 日志)。
答案3
我确实认为问题可能出在 apache 配置上,而不是 dns。您的虚拟主机部分显示 *:80。我希望您能理解这一点。我认为您已经在默认端口 (80) 上的该服务器中运行了一个站点。并且您正在尝试将另一个站点添加到端口 80。您可能知道,您不能将两个进程绑定到同一个端口和同一个 ip。如果这是问题所在,那么要么绑定到非标准端口,让用户在浏览器中输入端口并连接,要么使用不同的 ip 进行绑定,而不是您提到的所有 ip (* == all)。我没有做过基于名称的虚拟托管,基于名称的虚拟托管也应该是另一种选择。无论如何,您的 apache 错误日志应该清楚地表明问题是什么。错误日志和访问日志的位置应该在主 httpd.conf 中提及。它通常存在于 /etc/httpd/conf/httpd.conf 中,这些虚拟主机 conf 的链接来自那里。在虚拟主机部分中定义错误日志和访问日志也将在很大程度上帮助减轻查找出错位置的麻烦。
答案4
你必须考虑两点:
1)设置hosts文件,Linux系统为/etc/hosts,Windows系统为%WINDOWS%\System32\drivers\etc\hosts:
124.205.62.48 www.example.com www.othersite.com
2)按如下方式设置 Apache NamedVirtualHost:
NameVirtualHost 124.205.62.48:80
<VirtualHost www.example.com:80>
ServerName www.example.com
ServerAlias example.com *.example.com
DocumentRoot /www/example
</VirtualHost>
<VirtualHost www.othersite.com:80>
ServerName www.othersite.com
ServerAlias othersite.com *.othersite.com
DocumentRoot /www/othersite
</VirtualHost>
编辑 1: 注意 1:您可以通过以下命令检查 Apache 是否正在监听所有接口:
netstat -tpln
如果有这样一行:
tcp tcp 0 0.0.0.0:80 0.0.0.0:* LISTEN
然后 Apache 正在监听每个接口,并且一切正常。如果出现如下行:
tcp tcp 0 127.0.0.1:80 0.0.0.0:* LISTEN
然后 Apache 仅在“lo”接口上监听,并且 Apache 的配置文件中存在问题。
注意事项2:
如果Notice1没有问题,那么你需要通过以下方式检查防火墙:
iptables -L -n
我知道,一些 RedHat 克隆版有非常严格的防火墙,拒绝访问除 ssh 之外的所有端口...您可以尝试停止防火墙并尝试,如果您可以连接到 apache,然后控制/添加防火墙规则...