IPv6 with Lighttpd on Linux
The situation with lighttpd is sufficiently complicated that I can't call it a brief note, so here's what I've worked out. This is not necessarily valid for all distributions, since I'm working on Fedora 11.
Lighttpd is fully IPv6 enabled, but normally only binds its listening
socket to the IPv4 address. Some distributions override this by setting
the server.use-ipv6
configuration option if IPv6 is enabled on the
machine.
Now, server.use-ipv6
is somewhat underdocumented; the lighttpd
documentation says only 'bind to the IPv6 socket'. What it actually does
at the moment is make lighttpd always create IPv6 sockets, regardless
of what the socket is supposed to be bound to. (I am not sure how well
this works if you are binding to specific IPv4 addresses, even on a
dual binding machine with bindv6only
turned off.)
Since lighttpd fully supports IPv6, you do not need to turn
server.use-ipv6
on in order to bind to an IPv6 socket; instead,
you simply tell lighttpd to do so by giving it an IPv6 address as
server.bind
or whatever. So if you have turned bindv6only
on to turn
off dual-binding and thus need to bind separately to both the IPv4 and
the IPv6 sockets, you just need to tell lighttpd to do this by adding
the following configuration bit:
$SERVER["socket"] == "[::]:80" { }
(As the lighttpd documentation dryly notes, 'note that it's perfectly
valid to leave the body of the [$SERVER
] conditional empty'. Lighttpd
configuration is sometimes full of these magic side effects.)
This is sadly a lot more complicated than the Apache way, which can be described as 'it all just works, you don't have to worry about it' (cf the brief note).
|
|