Pilihan mendengarkan duplikat Nginx untuk [::]: 80 kesalahan

12

Ketika saya menjalankan perintah untuk menguji konfigurasi saya, saya mendapatkan kesalahan mengatakan ada beberapa duplikat untuk [::]:80. Sebelum itu saya punya masalah dengan duplikat beberapa server default.

Ketika saya memiliki masalah dengan beberapa server default, file saya terlihat seperti ini

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

root /usr/share/nginx/html;
index index.php index.html index.htm;

server_name munki;

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
    }

location /report {
    try_files $uri $uri/ =404;
    }

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

location /munki_repo/ {
    alias /usr/local/munki_repo/;
    autoindex off;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Untuk mengatasi masalah itu, saya mengubah konfigurasi menjadi:

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

root /usr/share/nginx/html;
index index.php index.html index.htm;

server_name munki;

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
    }

location /report {
    try_files $uri $uri/ =404;
    }

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

location /munki_repo/ {
    alias /usr/local/munki_repo/;
    autoindex off;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Setelah perubahan saya mulai mendapatkan "opsi duplikat untuk kesalahan [::]: 80". Saya tidak yakin apa yang saya lakukan salah dengan ini. Ini adalah pertama kalinya saya bekerja dengan Nginx. Adakah gagasan tentang apa masalahnya?

ztmcoder
sumber
Silakan kirim pesan kesalahan ( nginx -toutput). Apa versi nginx yang Anda jalankan? ipv6only=onmungkin tidak dibutuhkan lagi. Saya memiliki ini di blok server saya: listen 80;listen [::]:80;dan itu berjalan dengan baik. Apakah Anda memiliki blok server lain?
simlev
Itu berhasil apa yang Anda sarankan Terima kasih! Tidak akan pernah memikirkan hal itu.
ztmcoder

Jawaban:

27

Saya membuat jawaban dari komentar saya sebelumnya.

Silakan kirim pesan kesalahan ( nginx -toutput) karena dapat berisi beberapa wawasan yang bermanfaat.

Apa versi nginx yang Anda jalankan? Opsi ipv6only=onmungkin tidak diperlukan lagi dan sebaliknya berpotensi menimbulkan masalah. Saya memiliki ini di blok server saya dan berfungsi dengan baik:

listen 80;
listen [::]:80;

Apakah Anda memiliki blok server lain yang tidak Anda posting yang mungkin bertentangan satu sama lain?


Penjelasan: mari kita baca dokumentasi nginx saat ini (1.13) :

ipv6only=on|off
parameter ini (0.7.42) menentukan (melalui IPV6_V6ONLYopsi soket) apakah soket IPv6 yang mendengarkan alamat wildcard [::] hanya akan menerima koneksi IPv6 atau koneksi IPv6 dan IPv4. Parameter ini diaktifkan secara default. Ini hanya dapat diatur sekali saat mulai.

Parameter ini diaktifkan secara default berarti Anda tidak boleh menggunakanipv6only=on. Itu tidak ada gunanya dan berpotensi dapat menimbulkan masalah (lihat poin berikutnya).

Ini hanya dapat diatur sekali berarti bahwa jika Anda memiliki lebih dari sekali di mana saja dalam konfigurasi Anda (seperti di blok server yang berbeda), itu akan melemparkan kesalahan:nginx: [emerg] duplicate listen options for [::]:80.

simlev
sumber