![如何为多个虚拟主机设置 lighttpd 模块化配置](https://linux22.com/image/666465/%E5%A6%82%E4%BD%95%E4%B8%BA%E5%A4%9A%E4%B8%AA%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E8%AE%BE%E7%BD%AE%20lighttpd%20%E6%A8%A1%E5%9D%97%E5%8C%96%E9%85%8D%E7%BD%AE.png)
我对虚拟主机设置的最佳实践有疑问lighttpd
。我想为多个虚拟主机设置一个模块化配置,并使用拆分的配置文件,以便能够轻松启用/禁用特定虚拟主机。平台是运行 lighttpd 1.4.35 的 Debian 8.2。要求如下:
- 服务器应该绑定到公共 NIC 并在端口 80 上监听公共虚拟主机
- 它还应该监听端口 81,仅用于机器与机器之间的通信
- 此外,它还应绑定到内部网络上的 NIC(两个端口 80/81)
- vhosts 应该在单独的文件中定义
conf-enabled/vhostN.conf
因此我进行了如下设置(1.2.3.4 为公网 NIC 的 IP,10.0.0.1 为私网内部的 IP)。在中央服务器中,lighttpd.conf
我首先定义一个绑定到两个 IP 的默认服务器:
server.bind = "1.2.3.4" # public default server
server.port = 80
$SERVER["socket"] == "10.0.0.1:80" {} # private default server
vhosts 设置在 下的单独文件中conf-enabled/
,例如等vhost1.conf
。vhost2.conf
我尝试在配置文件中拆分以下指令:
## This is for machine2machine communication on port 81 over the Internet
$SERVER["socket"] == "1.2.3.4:81" {
...
}
## This is for machine2machine communication on port 81 inside the private net
else $SERVER["socket"] == "10.0.0.1:81" {
...
}
## This is vhost 1, accessible through Internet and private network
else $HTTP["host"] =~ "^vhost1.do.main$" {
...
}
## This is vhost 2
else $HTTP["host"] =~ "^vhost2.do.main$" {
...
}
等等。如果我把所有内容都放在一个大配置文件中,到目前为止一切都正常。但是当我将配置拆分成单独的文件时,似乎会出现else
语法错误,因为它在包含的 cfg 文件中不受尊重。
虽然else
HTTP 标头触发的虚拟主机部分之间是多余的Host
,但与部分的关系并非如此$SERVER["socket"]
。如果我删除else
,就可以通过端口 81 访问所有虚拟主机,除了命名虚拟主机的设置外,还继承了 m2m 主机的设置。
此外,我无法弄清楚如何在一个块中为 m2m 通信定义部分,并使用$SERVER["socket"]
两个 IP 的两个指令,因此我不得不为绑定到端口 81 的相同虚拟主机重复设置。如果有办法将两个$SERVER["socket"]
指令组合成一个部分,我可以使用端口 81 的默认服务器,并使用$SERVER["socket"]
绑定到端口 80 的指令围绕命名的虚拟主机。
我的问题是:
- 是否存在我在文档中没有看到的技巧,可以使用单独的 cfg 文件完成这样的 vhost 设置,从而达到与使用相同的效果
else
? - 是否可以组合两个
$SERVER["socket"]
指令以避免必须复制相同的虚拟主机两次并封装一堆命名的虚拟主机,从而避免使用else
?我用||
操作员进行了测试,但没有用。
有任何想法吗?