Ubuntu 16.04
sudo apt-get install python-certbot-nginx
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/example.online:29
Seharusnya tidak ada kesalahan
server {
listen 80;
listen [::]:80;
server_name example.online;
root /home/example/deploy;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name www.example.online;
return 301 $scheme://example.online$request_uri;
}
@iamdubx apakah Anda mengetahui hal ini? Saya mengalami masalah yang sama.
Masalah yang sama ... Ini berfungsi untuk situs default saya, tetapi tidak untuk sub domain kustom
Saya mengalami masalah yang sama.
Saya memang memiliki konfigurasi untuk menangkap beberapa domain.
server {
listen 80;
listen [::]:80;
root /home/primarydomain/public;
index index.html index.htm;
server_name domain1.com *.domain1.com domain2.com *.domain2.com domain3.com *.domain3.com domain4.com *.domain4.com;
return 302 $scheme://primarydomain.com$request_uri;
access_log /var/log/nginx/others.access.log;
error_log /var/log/nginx/others.error.log;
location / {
try_files $uri $uri/ /index.html =404;
}
}
Saya mendapatkan nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/others:19
untuk konfigurasi ini.
OS: Ubuntu 16.04. Ada bantuan?
Permasalahan yang sama.
Saya menjalankan perintah: certbot --redirect --nginx -d readacted.com -d www.redacted.com
file conf asli saya terlihat seperti:
server {
server_name redacted.com;
location / {
root /home/redacted/www;
index index.html;
}
}
server {
listen 80;
listen [::]:80;
server_name www.redacted.com;
return 301 $scheme://redacted.com$request_uri;
}
menurut /var/log/letsencrypt/letsencrypt.log saya melihat certbot mencoba melakukan ini:
server {
server_name redacted.com;
location / {
root /home/redacted/www;
index index.html;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/redacted.com-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/redacted.com-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
listen [::]:80;
server_name www.redacted.com;
return 301 $scheme://redacted.com$request_uri;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.redacted.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.redacted.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
nginx mengeluh bahwa pada baris listen [::]:443 ssl ipv6only=on; # managed by Certbot
pesan kesalahan sebenarnya:
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/redacted.com:23
Google cepat memunculkan halaman ini dari tahun 2010:
http://www.serverphorums.com/read.php?5 , 203912
yang menunjukkan bahwa nginx menjadi bingung karena beberapa detail implementasi internal.
Saya bukan ahli nginx, tetapi saya telah menguji bahwa yang berikut tampaknya berfungsi:
server {
server_name redacted.com;
location / {
root /home/redacted/www;
index index.html;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/redacted.com-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/redacted.com-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
listen [::]:80;
server_name www.redacted.com;
return 301 http://redacted.com$request_uri;
listen [::]:443; # manually changed
ssl on; #manually changed
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.redacted.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.redacted.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
Saya ingin solusi yang lebih baik bahwa solusi ini idealnya ...
@ohemorange , apakah Anda tahu jika kami memiliki masalah pelacakan ini? Rasanya tidak asing bagi saya, tetapi saya tidak ingat apakah itu sesuatu yang telah kita lihat sebelumnya atau tidak.
Saya belum pernah melihat ini sebelumnya. Sepertinya mereka memperbaiki bug asli, kecuali jika Anda menggunakan IPv6. Dan karena kami baru saja meluncurkan dukungan IPv6, itulah mengapa orang melakukan ini. Solusi di atas akan berhasil; Saya akan melihat apakah ada alasan mengapa ini belum diperbaiki di Nginx untuk IPv6.
Sebenarnya, Anda bahkan tidak perlu melakukan perubahan ssl on
- menghapus ipv6only=on
dari salah satu atau keduanya akan memperbaiki masalah.
@joohoi , kami mungkin ingin memperbaikinya dengan menghapus ipv6only=on
seluruhnya atau hanya memasukkannya sekali per baris alamat unik yang kami tambahkan. Apakah Anda tahu apa yang terbaik di sini?
Mengalami masalah yang sama di sini. Semuanya baik-baik saja untuk domain pertama saya. Domain kedua mulai mengalami masalah ini.
Sepertinya Certbot tidak dapat mendeteksi perintah ipv6only sepenuhnya karena alasan tertentu. Menghapus itu akan memperbaiki masalah bagi sebagian besar pengguna. Hal ini dapat menyebabkan beberapa masalah dengan versi Nginx yang sangat lama, karena perilaku ipv6only dan defaultnya telah berubah seiring waktu.
Maaf atas tambalan yang buruk, tetapi ini memperbaikinya untuk saya, semoga akan ada perbaikan yang tepat segera!
--- /usr/lib/python3/dist-packages/certbot_nginx/configurator.py.orig 2018-02-14 18:38:30.380863045 +0000
+++ /usr/lib/python3/dist-packages/certbot_nginx/configurator.py 2018-02-14 18:38:01.501018553 +0000
@@ -507,10 +507,10 @@ class NginxConfigurator(common.Installer
'[::]:{0}'.format(self.config.tls_sni_01_port),
' ',
'ssl']
- if not ipv6info[1]:
- # ipv6only=on is absent in global config
- ipv6_block.append(' ')
- ipv6_block.append('ipv6only=on')
+ #if not ipv6info[1]:
+ # # ipv6only=on is absent in global config
+ # ipv6_block.append(' ')
+ # ipv6_block.append('ipv6only=on')
if vhost.ipv4_enabled():
ipv4_block = ['\n ',
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
$ nginx -V
nginx version: nginx/1.10.3 (Ubuntu)
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads
$ apt show python-certbot-nginx
Package: python-certbot-nginx
Version: 0.21.1-1+ubuntu16.04.1+certbot+1
Priority: optional
Section: oldlibs
Maintainer: Debian Let's Encrypt <[email protected]>
Installed-Size: 9,216 B
Depends: python3-certbot-nginx
Download-Size: 2,470 B
APT-Manual-Installed: yes
APT-Sources: http://ppa.launchpad.net/certbot/certbot/ubuntu xenial/main amd64 Packages
Description: transitional dummy package
This is a transitional dummy package for the migration of certbot
from python2 to python3. It can be safely removed.
Masalah yang sama. Apakah ini akan diatasi?
Maaf untuk dinding teks, tapi ini dia.
Untuk menjelaskan masalah ini:
opsi ipv6only digunakan untuk dapat menangani beberapa pernyataan mendengarkan per soket. Sayangnya itu hanya dapat digunakan sekali dalam konfigurasi server untuk soket. Jadi Nginx akan gagal untuk memulai jika:
server {
...
server_name first.example.org;
listen [::]:80 ipv6only=on;
listen 80;
}
server {
...
server_name second.example.org;
listen [::]:80 ipv6only=on;
listen 80;
}
Dengan versi Nginx terbaru, masalah ini tidak akan muncul jika pengaturan ipv6only
dihilangkan sepenuhnya, karena nilai default variabel adalah ipv6only=on
. Jadi berikut ini adalah konfigurasi yang valid dan berfungsi di versi Nginx> = 1.3.4:
server {
...
server_name first.example.org;
listen [::]:80;
listen 80;
}
server {
...
server_name second.example.org;
listen [::]:80;
listen 80;
}
Namun nilai default variabel ipv6only
di versi Nginx sebelum 1.3.4 adalah ipv6only=off
, jadi versi yang lebih lama akan gagal dengan konfigurasi berikut:
server {
...
server_name first.example.org;
listen [::]:80;
listen 80;
}
Saat ini situasi dengan paket distribusi adalah bahwa satu-satunya distribusi yang dikirimkan dengan versi lama Nginx adalah Debian Wheezy (Debian 7), yang mengirimkan Nginx versi 1.2.1 dari repositori default.
Jika kami akan menghapus deteksi dan pengaturan ipv6only
sepenuhnya dari Certbot, ini akan merusak semua pengguna di Debian Wheezy. Untungnya tanggal EOL untuk Wheezy ditetapkan pada Mei 2018 , jadi kami hampir dapat menghapus kompleksitas tambahan ini dari kode Certbot sama sekali.
Fungsionalitas Certbot saat ini mengurai konfigurasi Nginx lengkap, mendeteksi pengaturan ipv6only=on
sudah ada di salah satu blok server{}
dan menghilangkan penambahannya jika demikian. Namun, jika nilainya tidak ditemukan, Certbot akan menambahkannya. Masalah ini bermuara pada Certbot yang tidak dapat mendeteksi variabel yang sudah ada ini dari beberapa blok konfigurasi pengguna saat ini, dan karenanya mencoba menambahkannya ke blok server{}
yang sedang dikonfigurasi.
Untuk membuat keputusan tentang rute untuk memperbaiki masalah ini, kami memerlukan contoh konfigurasi lengkap di mana Certbot gagal dengan cara yang dijelaskan di atas untuk dapat meningkatkan deteksi variabel ipv6only=on
sudah ada jika kami memutuskan untuk memperbaikinya menggunakan cara itu alih-alih menghapus fungsi ini sama sekali.
Terima kasih atas tambalannya; yang berhasil untuk saya. FWIW, saya menggunakan Ubuntu 17.
Saya harus menghapus semua file
listen [::]:80;
listen 80;
Untuk membuatnya berhasil
https://github.com/chilion - terima kasih! menghapus:
listen [::]:80;
listen 80;
bekerja untuk saya juga.
Saya memiliki dua domain di satu server Ubuntu. Yang pertama berhasil tidak ada masalah. Kemudian saya mendapatkan error seperti di atas. Solusi Anda berhasil untuk saya. Saya baru saja menginstal nginx di server baru dengan segalanya segar.
Terima kasih.
menghapus listen [::]:80
tetapi menyisakan listen 80;
bekerja untuk saya untuk penginstalan di domain non-default
Saya berkomentar mendengarkan [::]: 443 dalam pengaturan subdomain, kemudian berhasil. Apakah ini oke
Saya baru saja mengalami masalah ini. Setiap badan yang mencoba memahami berbagai perintah listen
dan ipv6only
.
Saya sangat merekomendasikan posting blog ini, sampai saya menemukan artikel ini saya tidak yakin apa hubungannya dengan semua saran berbeda yang saya temukan di web.
https://stefanchrist.eu/blog/2015_01_21/Using%20ipv6only%20in%20Nginx.xhtml
Kutipan dari posting blog ini adalah momen bola lampu bagi saya.
Parameternya berbeda dari mis. Flag ssl. Bendera ssl dapat digunakan dalam berbagai konteks server dan dinyalakan dan dimatikan sesuai keinginan. Bendera ipv6only hanya dapat disetel sekali per port (dan alamat). Hanya satu arahan mendengarkan my yang berisi parameter dan itu akan berlaku untuk semua konteks server menggunakan port ini. Jika Anda menggunakannya dua kali, daemon nginx tidak akan mulai dan akan menulis pesan kesalahan berikut ke log kesalahannya
Masih ada, setelah purge python, instal ulang kesalahan ini dilemparkan. Kesalahan di suatu tempat di certbot
Mengomentari baris ini menyelesaikan kesalahan, tetapi menimbulkan masalah lain
server {
listen 443 ssl http2;
# listen [::]:443 ssl http2 ipv6only=on;
Dalam kasus beberapa domain
Dari pada
dengarkan [::]: 443 ssl http2 ipv6only = on;
Menggunakan
dengarkan contoh. com: 443 ssl http2 ipv6only = on;
Hilangkan perintah listen
di semua blok server Anda.
Kesalahan ini muncul ketika ada dua blok server yang mendengarkan di domain yang sama dengan port yang sama.
Periksa semua file konfigurasi Anda di folder yang tersedia situs untuk pendengar duplikat. Dalam kasus saya, certbot membuat duplikat pendengar untuk 443 di file default.
Jika Anda dapat memberikan file konfigurasi untuk mereproduksi ini dengan versi Certbot terbaru, saya akan tertarik untuk melihatnya.
Untuk para petualang yang mungkin mendapatkan tiket ini di masa depan melalui pencarian yang sepi, dan mereka tidak tahu mengapa ini terjadi ketika mereka tidak memiliki ipv6only=on
tempat lain.
Anda akan mendapatkan kesalahan / masalah yang sama jika Anda memiliki reuseport
dalam konfigurasi Anda.
Saya akui, saya bingung. Menurut dokumentasi nginx , ada sejumlah parameter untuk listen
, tetapi hanya ipv6only
menentukan "Ini hanya dapat disetel sekali saat mulai." Apakah baris ini hilang dari parameter yang tersisa? Apakah itu bergantung pada sistem? Saya mulai berpikir bahwa memperbaiki perilaku ini di hulu mungkin merupakan tindakan terbaik; Tampaknya konyol untuk hanya mengizinkan opsi ini disetel sekali.
Sayangnya saya bukan ahli dalam soket linux, jadi saya tidak dapat membuat opini yang tepat mengapa opsi tersebut hanya dapat disetel sekali, tetapi saya yakin ada alasannya.
Mungkin posting ini membantu: https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/
Yang saya tahu adalah, seperti ipv6only
, reuseport
juga hanya dapat disetel sekali untuk setiap port tertentu (jadi hanya satu pendengar yang dapat memilikinya). Mengapa ini kebetulan bertentangan (karena kurangnya kata yang lebih baik) dengan ipv6only
, saya tidak tahu.
Namun, saya merasa menambahkan ipv6only=on
saat menjalankan certbot agak sia-sia.
Ini tidak lagi diperlukan sejak nginx 1.3.4, yang telah dirilis pada tahun 2012 , dan secara teknis EOL.
Setidaknya, mungkin harus ada pemeriksaan versi dan hanya tambahkan jika nginx < 1.3.4
sebelum menambahkannya.
Kami tidak mengaturnya di Certbot. Saat kami membuat blok server, kami menyalin beberapa arahan dari blok server default yang ada, atau blok server template lainnya, termasuk arahan mendengarkan bersama dengan opsinya. Ini memungkinkan Certbot bekerja meskipun Nginx berada di belakang proxy atau jenis penerusan port lainnya. Kami secara eksplisit menghapus ipv6only=on
dari blok server yang digandakan karena dokumentasi menunjukkan itu hanya dapat digunakan sekali.
Idealnya, kami akan melakukan hal yang sama untuk semua opsi yang kami tahu tidak dapat diduplikasi dengan cara ini, tetapi biarkan opsi lain yang mungkin secara khusus diinginkan pengguna untuk dimiliki oleh semua blok server mereka. Untuk melakukan itu, kita harus mengetahui opsi mana yang dapat diulang, yang tampaknya tidak ditunjukkan oleh dokumentasi, dan yang tampaknya hanya kita temukan melalui orang-orang yang datang kepada kita tentang masalah seperti ini.
Terima kasih @joohoi
Penjelasan & solusi Anda berfungsi untuk saya di Ubuntu 20 dengan versi nginx: 1.18.0
Saya memiliki 2 VPS: 1 adalah Ubuntu menjalankan Nginx 1.10 berfungsi dengan baik, yang lainnya adalah Centos menjalankan Nginx 1.16 dan memiliki kesalahan ini. Aneh
Komentar yang paling membantu
Permasalahan yang sama.
Saya menjalankan perintah:
certbot --redirect --nginx -d readacted.com -d www.redacted.com
file conf asli saya terlihat seperti:
menurut /var/log/letsencrypt/letsencrypt.log saya melihat certbot mencoba melakukan ini:
nginx mengeluh bahwa pada baris
listen [::]:443 ssl ipv6only=on; # managed by Certbot
pesan kesalahan sebenarnya:
nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/redacted.com:23
Google cepat memunculkan halaman ini dari tahun 2010:
http://www.serverphorums.com/read.php?5 , 203912
yang menunjukkan bahwa nginx menjadi bingung karena beberapa detail implementasi internal.
Saya bukan ahli nginx, tetapi saya telah menguji bahwa yang berikut tampaknya berfungsi:
Saya ingin solusi yang lebih baik bahwa solusi ini idealnya ...