我尝试使 lighttpd 只能从 Debian 系统上的本地主机使用。以下行位于/etc/lighttpd/lighttpd.conf
server.port = 80
server.bind = "127.0.0.1"
server.use-ipv6 = "disable"
然而,网络服务器也在所有 IPv6 地址上运行:
# netstat -tupan|grep lighttpd
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 519887/lighttpd
tcp6 0 0 :::80 :::* LISTEN 519887/lighttpd
使用以下行而不是配置文件中以前打印的行,服务器将无法启动:
server.bind = "[::1]"
这意味着,我只收到有关已使用端口的错误消息,但该端口未使用!
# netstat -tupan|grep LISTEN|grep 80/; lighttpd -f /etc/lighttpd/lighttpd.conf; netstat -tupan|grep LISTEN|grep 80/
2023-04-27 16:50:24: (network.c.537) can't bind to socket: [::1]:80: Address already in use
如何限制 lighttpd 仅在本地主机上侦听(仅 IPv4、仅 IPv6 或 IPv4 和 IPv6)
答案1
由于您的 lighttpd.conf 是基于 Debian 的,因此默认的 /etc/lighttpd/lighttpd.conf 包含:
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
您应该注释掉该行以停止 lighttpd 侦听 IPv6
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
如果您仍然想让 lighttpd 只能从 IPv6 上的本地主机使用,请添加
$SERVER["socket"] == "[::1]:80" { }