Globales Setzen von ipv6only = off


7

Seit einem Update ist mein Nginx-Server nur über IPv6 und nicht über IPv4 verfügbar, solange meine Konfiguration enthalten ist

listen   [::]:80 default_server;

Jetzt habe ich das geändert

listen   [::]:80 default_server ipv6only=off;

und der Server ist wieder über IPv4 verfügbar. Dies ist auf die Änderungen in Nginx 1.3.4 zurückzuführen (Abschnitt „Änderungen mit Nginx 1.3.4“) .

Da ich mehr als eine Serverkonfiguration auf derselben Maschine habe, die ich ipv6only=offglobal festlegen möchte, gibt es eine Möglichkeit, dies zu tun?

Antworten:


10

Ich habe dies gerade mit einem Upgrade von 1.0 auf 1.4 durchlaufen.

Da nur ein einziger Listener tatsächlich an einen bestimmten Port gebunden ist, reicht es aus, ipv6only=offin einer Ihrer listenAnweisungen anzugeben .

In meinen Standardblöcken habe serverich also:

    listen [::]:80 ipv6only=off default_server;

und

    listen [::]:443 ipv6only=off default_server;

Alle anderen serverBlöcke geben lediglich die ursprünglichen listenAnweisungen an. Und es funktioniert; Jeder virtuelle Host ist entweder über IPv4 oder IPv6 erreichbar.

Sie können es auch allen hinzufügen , aber das ist nicht wirklich erforderlich. Das Hinzufügen zu einem von ihnen ist ausreichend.

Da das ipv6only=Flag jedoch nur für Linux bestimmt ist, verwende ich dieses Konstrukt nicht mehr. Meine aktuellen Anweisungen spezifizieren sowohl IPv4 als auch IPv6 explizit, wie zum Beispiel:

listen [::]:80 default_server;
listen 80 default_server;

Welchen Listenblock haben Sie auf den anderen Servern geschrieben? Für alle meine Anfragen an die anderen Server auf IPv4 landen auf dem default_server.
white_gecko

Es ist in /etc/nginx/conf.d/default.confdem dient die server_name _. Wenn Sie Probleme haben, überprüfen Sie das Fehlerprotokoll von nginx. Wenn Sie gerade eine ausgeführt service nginx reloadhaben, wird OK angezeigt, auch wenn die Überprüfung der Konfigurationsdatei fehlgeschlagen ist.
Michael Hampton

Entschuldigung, ich verstehe nicht. Was genau hast du hinzugefügt /etc/nginx/conf.d/default.conf?
white_gecko

Ich habe die obige listenAnweisung in diesen speziellen serverBlock eingefügt. Den Rest habe ich unberührt gelassen.
Michael Hampton

Ah, ok, weil ich meine Serverkonfigurationen in /etc/nginx/sites-availableresp habe. /etc/nginx/sites-enabled.
white_gecko

4

Eine Alternative zu @Michael Hamptons Antwort (aber Sie müssen alle Dateien berühren) ist das Einfügen

listen 80;      # listen for IPv4
listen [::]:80; # listen for IPv6

für alle Server.


Seltsam ist, dass das Einfügen listen [::]:80 ipv6only=offfür mehr als einen Server dazu führt

nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default.conf:3

Und eine Mischung aus listen 80;und ipv6only=off(auf verschiedenen Servern) ergibt

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.