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?

white_gecko
quelle

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;
Michael Hampton
quelle
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()
white_gecko
quelle