说起httpd的默认虚拟主机,很多人第一反应是:啥玩意儿?虚拟主机不就是开个网站用的吗,怎么还分默认的?别急,今天咱们就用最接地气的方式,扒一扒httpd(Apache HTTP Server)里的“默认虚拟主机”到底是个啥神奇玩意儿。
那么,默认虚拟主机到底是个啥东西?简单来说就是,如果你访问的域名没有和任何虚拟主机条目匹配,服务器该给你“甩”哪个站点内容?那就啪啪啪被服务器指定成默认虚拟主机啦。比如你配置了3个站点,访问hello.com返回Hello站,访问world.net访问World站,那访问unknown.com呢?没匹配,默认虚拟主机接管!就是“服务器给你安排了个家”。
httpd默认虚拟主机的“制定规则”很有意思:它是按配置文件“看到”的虚拟主机顺序决定的。谁先写谁先坐,有点像排队买奶茶,先到先服务。这就意味着,如果你配置文件里第一个虚拟主机是hello.com,那么敲个不知道啥域名,默认就是用hello.com的设置来应对,别问为啥,硬核规定。
说完了怎么选,咱们看看默认虚拟主机怎么配置。Apache的配置文件一般在 /etc/httpd/conf/httpd.conf 或者 /etc/apache2/sites-available/ 目录下(根据你Linux发行版不同)。要指定默认虚拟主机,你只需要确保你想当“默认”的虚拟主机配置文件或配置段写在前面就行了。要不然httpd启动的时候就是“先来先服务”,天谁给你排第一,就当队长了。
举一个超级简单的例子:
<VirtualHost *:80>
ServerName default.local
DocumentRoot /var/www/default
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
</VirtualHost>
上面那个default.local的虚拟主机在配置文件中先出现,它就是默认虚拟主机。访问没匹配到的域名默认掉进它那边去。访问了example.com当然给example相关内容了。
提示个小坑:有时候新手喜欢乱改配置顺序,结果导致所有网站内容都变成一个默认站,哭都找不到哭点。看到崩溃的命令行了没?就是那种“啥?你的主页被default替代了?”的错觉。
HTTP请求头里的“Host”是自动传递的,但注意,当直接IP访问服务器时,这个“Host”是域名,变成IP了,那访问的就是默认虚拟主机了。所以明白了吗?想要服务器听你的话,域名绑定和配置顺序都得调得妥妥的,不能让默认虾米乱窜。
另外,启用NameVirtualHost指令是老版本Apache必须的,告诉httpd启用基于名字的虚拟主机。Apache2.4以后,官方已经自动启用,不用你操心。谁还用老版本Apache,绝对是复古爱好者。
对了,默认虚拟主机配置常见的文件路径和命令也说说,方便排错:
sudo a2ensite your-site.conf && sudo systemctl reload apache2
sudo systemctl restart httpd 或 sudo systemctl restart apache2
言归正传,掌握了默认虚拟主机,不光是技术面高手,也更懂服务器底层到底咋回事。任何没有匹配的请求,都得有个兜底方案,不然访问了404你哭还是服务器哭?玩服务器的都懂,兜底就是安全感。
抽风插广告时间:玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,边玩边赚钱,良心推荐啊,别怪我没告诉你。
说到这,有没有小伙伴感受到默认虚拟主机的威力了?你站着不管,Apache帮你背锅,兜里揣着默认虚拟主机这张“保险单”,不怕意外访问找不到地方去。
哦对了,随机脑筋急转弯:如果httpd默认虚拟主机先吃了你的请求,是不是就像你点餐店长先给隔壁桌送餐了?吃不到嘛,你是不是得多叫几声“订单来了”?