更新なので、私のnginxサーバーはIPv6経由でのみ利用でき、IPv4経由では利用できませんが、私の設定には含まれています
listen [::]:80 default_server;
これを次のように変更しました
listen [::]:80 default_server ipv6only=off;
そしてサーバーは再びIPv4経由で利用可能です。 nginx 1.3.4(セクション“ nginx 1.3.4での変更”) の変更が原因であると考えられます。
同じマシンに複数のサーバー構成があるので、ipv6only=off
グローバルにそうする可能性はありますか?
私はこれを1.0から1.4へのアップグレードで試したところです。
特定のポートに実際にバインドされているリスナーは1つだけなので、listen
ディレクティブのany oneにipv6only=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;
@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()