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:
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.
Thanks for the tip. I was at my wits end trying to get this running myself before I found your article.
Many thanks! This was what I encountered too and your solution fixed it perfectly. 🙂
I get an error running nginx -t
nginx: [emerg] the INET6 sockets are not supported on this platform in “[::]:80” of the “listen” directive in /opt/nginx/conf/nginx.conf:55
Any suggestions what to do?
The error should be fairly explanatory. Your distro doesn’t have IPv6 support enabled on it. Upgrade it or enable it is your only option to get IPv6 support at all.
Thanks for posting this. I had the same problem and found this blog post via a Google search for “nginx”, “ipv6”, and “default server”.