Linode.com has recently setup IPv6 natively and is deploying it across their data-centers. This is great as I now have a native IPv6 address for my VPS.
I use Nginx as a replacement for Apache and I noticed today that my vhosts where not correctly responding on the IPv6 address. Since I use a wildcard for my subdomains, it still would respond with my main domain, but it wouldn’t recongize any additional or subdomain. From the configuration documentation it makes it sound like I only need to add “listen [::]:80;” to my vhosts in order to get this to work. However despite my tries I received an error:
[emerg]: bind() to [::]:80 failed (98: Address already in use)
All documentation supports the suggested command and some suggest running the sockets separately (by adding ip6only=on to that listen). However this still failed to make it work.
So, after going through all my configs, test configs (for test subdomains I have) and disabling any listen directives (which broke a few things), I still couldn’t get it to work. In the end I am not quite sure how I got it to work. I even checked with “lsof -i :80″ to see anything that might of been running and couldn’t find anything.
But what I did to finally get this to work right was add this to my default config (ie for my main domain):
listen 80 default;
listen [::]:80 default ipv6only=on;
Then for each other vhost I added:
listen [::]:80;
This seems to make things work without any problem. No errors whatsoever and ipv6 responds as it should.
As a final note, I should mention my ISP does not natively support IPv6 yet. I am using a tunnel broker via HE.

