RSS-Symbol
Wenn Du über neue Weblog-Einträge Bescheid wissen möchtest, dann abonniere einfach den Atom-Feed oder folge mir bei Twitter.

Nginx im Dual-Stack-Verfahren betreiben

Datum01. November 2012 · Kommentare0 Kommentare · Schlagwörteripv6, nginx, server

Obwohl der Umstieg auf IPv6 eher schleppend vorangeht (in Deutschland ist der IPv6-Traffic unter 1%), sollte man sich schon jetzt für die Zukunft rüsten. Sofern man eine IPv6-Adresse sein Eigen nennen darf, kann man den sogenannten Dual-Stack-Betrieb fahren, bei dem ein Host zusätzlich zur altbekannten IPv4-Adresse über eine IPv6-Adresse erreichbar ist. Setzt man Nginx als Webserver ein, ist die Konfiguration hierfür sehr einfach. Zunächst sollte man aber überprüfen, ob die eingesetzte Nginx-Version überhaupt mit IPv6 umgehen kann:

$ nginx -V
nginx version: nginx/1.1.19
TLS SNI support enabled
configure arguments: [...] --with-ipv6 [...]

Wenn in den Konfigurationsargumenten der Schalter --with-ipv6 gesetzt wurde, steht dem Dual-Stack nichts mehr im Wege. Nun sollte man in der Nginx-Konfiguration für den Host (oder den primären Host im Falle von namensbasiertem Virtual Hosting) die nachfolgenden Listen-Optionen setzen. Zu finden ist diese Konfigurationsdatei meist als Symlink unter /etc/nginx/sites-enabled/default.

server {
	listen [::]:80 ipv6only=on;
	listen 80;

	server_name example.org localhost 127.0.0.1;

	[...]
}

Sie sorgen dafür, dass Nginx auf allen Netzwerkschnittstellen auf eingehende IPv6- und IPv4-Verbindungen auf Port 80 lauscht. Theoretisch wäre die erste Zeile ohne die Option ipv6only=on ausreichend. Im Test traten jedoch einige Probleme dabei auf, sodass sie besser gesetzt wird. Ohne diese Option würde beim Binden auf IPv6 gleichzeitig das Binden auf IPv4 erfolgen, wodurch die folgende Zeile (also listen 80) nicht nur unnötig wäre, sondern so schlicht nicht funktionieren würde (klar, der Port ist schon durch die erste Option gebunden und damit „besetzt“). Der Start von Nginx würde mit folgender Fehlermeldung fehlschlagen:

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)
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] still could not bind()
nginx.

Daher wird durch ipv6only=on angezeigt, dass wirklich nur auf IPv6 gebunden werden soll. In der nächsten Zeile erfolgt dann explizit das Binden auf IPv4.

Dasselbe kann nun auch für einen SSL-Host erfolgen:

server {
	listen [::]:443 ipv6only=on;
	listen 443;

	server_name example.org localhost 127.0.0.1;

	[...]
}

Sollten noch weitere virtuelle Hosts vorhanden sein, so kann der Dual-Stack-Betrieb für diese analog eingestellt werden. Zwingend beachten sollte man dabei jedoch, dass die Option ipv6only=on bei diesen nicht mehr gesetzt werden muss bzw. darf.

Abschließend kann der Nginx-Server neu gestartet werden:

$ /etc/init.d/nginx restart
oder unter Ubuntu
$ service nginx restart
Bild vom Autor

Über den Autor: Christian

Im April 2007 habe ich dieses Blog aus der Taufe gehoben und schreibe seitdem unregelmäßig über interessante Themen. Gegenwärtig studiere ich den Masterstudiengang Data & Web Engineering an der TU Chemnitz. Über einen Besuch meiner Profile bei Twitter, Google+ und XING würde ich mich freuen.

Kommentare

 

Mitreden? Dann jetzt kommentieren!

Gestattete BBCode-Formatierungen sind [blockquote], [code], [em], [strong], [url].

* Pflichtfeld · E-Mail-Adresse ist nicht öffentlich sichtbar.