web-dev-qa-db-ja.com

ipv6only = offをグローバルに設定

更新なので、私のnginxサーバーはIPv6経由でのみ利用でき、IPv4経由では利用できませんが、私の設定には含まれています

listen   [::]:80 default_server;

これを次のように変更しました

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

そしてサーバーは再びIPv4経由で利用可能です。 nginx 1.3.4(セクション“ nginx 1.3.4での変更”) の変更が原因であると考えられます。

同じマシンに複数のサーバー構成があるので、ipv6only=offグローバルにそうする可能性はありますか?

7
white_gecko

私はこれを1.0から1.4へのアップグレードで試したところです。

特定のポートに実際にバインドされているリスナーは1つだけなので、listenディレクティブのany oneipv6only=offを指定するだけで十分です。

したがって、私のデフォルトのserverブロックには、次のようになります。

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

そして

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

他のすべてのserverブロックは、元のlistenディレクティブを指定するだけです。そしてそれは機能します。仮想ホストは、IPv4またはIPv6のいずれかを介して到達可能です。

それらのallに追加することもできますが、それは実際には必要ありません。それらのいずれかに追加するだけで十分です。

ただし、ipv6only=フラグはLinux専用であるため、この構造体はもう使用しません。現在のディレクティブでは、IPv4とIPv6の両方を明示的に指定しています。

listen [::]:80 default_server;
listen 80 default_server;
10
Michael Hampton

@Michael Hamptonの答えの代わりに(ただし、すべてのファイルに触れる必要があります)を挿入することです

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

すべてのサーバー。


奇妙なことに、複数のサーバーにlisten [::]:80 ipv6only=offを挿入すると、

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

listen 80;ipv6only=off(異なるサーバー内)を混在させると、

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()
4
white_gecko