我有一个免费的 .gq 域名,几天后就会过期,所以我买了一个 .xyz 域名。我需要在 Apache (Debian) 中更改哪些内容才能让一切恢复正常?
我已经在 中更改了虚拟主机配置文件/etc/apache/sites-available
,运行了命令a2dissite NAME-OF-SUBDOMAIN.domain.gq
和a2ensite NAME-OF-SUBDOMAIN.domain.xyz
。子域名仍然不起作用。每当我尝试访问 mail.domain.xyz 时,我最终都会进入 www.domain.xyz 网站。
概括:
- 配置Apache2域名.gq
- 我现在使用域名.xyz
- 我如何告诉 Apache 我不再使用旧域名而是使用新域名?
- 如何让我的子域名(虚拟主机)再次工作?
一个虚拟主机文件的示例(所有其他 vh 文件具有相同的方案):
<VirtualHost *:80>
ServerName pic.domain.xyz
DocumentRoot /var/www/pic/
</VirtualHost>
现在它能正常工作了。我不知道具体原因。我唯一做的就是apt update && apt upgrade -y
。我不知道是否是升级导致的,我只在更新 2 小时后检查过。
答案1
您可以VirtualHost
使用 列出所有已配置和活动的apache2ctl -S
。列表应该是这样的:
*:80 is a NameVirtualHost
default server www.example.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost www.example.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost sub1.example.com (/etc/apache2/sites-enabled/sub1.example.com:1)
port 80 namevhost sub2.example.com (/etc/apache2/sites-enabled/sub2.example.com:1)
这些主机名的顺序与 中的文件名的顺序相同,/etc/apache2/sites-enabled/
因为实际上它们最初是Include
用 d 开头/etc/apache2/apache2.conf
的Include sites-enabled/
。
现在,当浏览器发送以
GET / HTTP/1.1
Host: sub2.example.com
Apache 执行完配置ServerName
和ServerAlias
指令后停止在第一场比赛. 如果没有找到任何匹配项回到第一个虚拟主机(默认主机文件名以此开头,以000-
使其成为第一个处理的文件)。
为了使用DocumentRoot
文件中配置的其他指令,sub2.example.com
您的配置必须满足以下条件:
/etc/apache2/sites-enabled/sub2.example.com
一定有ServerName sub2.example.com
- 任何前面的配置文件,即
000-default
和sub1.example.com
都不得有sub2.example.com
或*.example.com
在ServerName
或中ServerAlias
。
很可能你已经已经声明 ServerAlias *.example.com
在配置的配置文件中www.example.com
。
答案2
当传入请求到达 Apache 服务器时,它会检查其中请求的“Host”标头,并在其拥有的虚拟主机的“ServerName”指令中查找匹配项,如果不匹配,则第一个定义的虚拟主机将会应答。
简而言之:修改每个虚拟主机中的 ServerName 指令以确保请求正确地传递到虚拟主机。