I recently configured an IPv6 tunnel from SixXS on my FritzBox so that I can surf the web with IPv6.

To configure an IPv6 tunnel, you just have to register on the SixXs website, wait for approval and request a Heartbeat-Tunnel. Then type the tunnel-id and your login information in your FritzBox.

After having a working IPv6 connection at home, I enabled IPv6 on my servers. Hetzner provides a /64 to every server. To enable it, I just added a few lines to my network configuration:

$ cat /etc/network/interfaces
iface eth0 inet6 static
  address 2a01:4f8:191:31c6::2
  netmask 64
  gateway fe80::1

In nginx I changed in every server block the listen directive:

server {
  listen 80; #old
  listen  [::]:80; #new
}

If you forget some blocks, you may get this error:

$ service nginx restart 
Restarting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
...

Then I added a new AAAA-Record for my domains and now they are available over IPv6.

To test if everything works, I would recommend an online IPv6 Website test like IPv6 test. I also found the chrome plugin IPvFoo which shows the usage of IPv4/6 on every page and all includes.