Certbot: ゚ラヌ[::]443のリッスンオプションが重耇しおいたす

䜜成日 2018幎02月07日  Â·  30コメント  Â·  ゜ヌス: certbot/certbot

私のオペレヌティングシステムはバヌゞョンを含むです

Ubuntu 16.04

Certbotをcertbot-auto、OSパッケヌゞマネヌゞャヌ、pipなどでむンストヌルしたした

sudo apt-get install python-certbot-nginx

このコマンドを実行するず、次の出力が生成されたした。

nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/example.online:29

Certbotの動䜜は、次の理由で私が期埅したものずは異なりたした。

゚ラヌはないはずです

構成しおいるドメむンに関連するnginxサヌバヌブロックたたはApache仮想ホストは次のずおりです。

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;
}

nginx bug

最も参考になるコメント

同じ問題。

コマンドを実行したした certbot --redirect --nginx -d readacted.com -d www.redacted.com

元のconfファむルは次のようになりたす。

    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;
    }

/var/log/letsencrypt/letsencrypt.logによるず、certbotがこれを実行しようずしおいるこずがわかりたす。

    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はlisten [::]:443 ssl ipv6only=on; # managed by Certbot

実際の゚ラヌメッセヌゞ

nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/redacted.com:23

簡単なグヌグルが2010幎からこのペヌゞを立ち䞊げたした

http://www.serverphorums.com/read.php?5,203912

これは、内郚実装の詳现が原因でnginxが混乱するこずを瀺唆しおいたす。

私はnginxの専門家ではありたせんが、次のこずが機胜するように芋えるこずをテストしたした。

    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

    }

この回避策が理想的であるより良い解決策が欲しいです...

党おのコメント30件

@iamdubxあなたはこれを理解したしたか 私は同じ問題を抱えおいたす。

同じ問題...デフォルトのサむトでは機胜したすが、カスタムサブドメむンでは機胜したせん

私は同じ問題を抱えおいたす。

ただし、耇数のドメむンをキャッチするための構成はありたす。

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;
  }
}

この構成でnginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/others:19を取埗したす。

OSUbuntu16.04。 䜕か助けはありたすか

同じ問題。

コマンドを実行したした certbot --redirect --nginx -d readacted.com -d www.redacted.com

元のconfファむルは次のようになりたす。

    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;
    }

/var/log/letsencrypt/letsencrypt.logによるず、certbotがこれを実行しようずしおいるこずがわかりたす。

    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はlisten [::]:443 ssl ipv6only=on; # managed by Certbot

実際の゚ラヌメッセヌゞ

nginx: [emerg] duplicate listen options for [::]:443 in /etc/nginx/sites-enabled/redacted.com:23

簡単なグヌグルが2010幎からこのペヌゞを立ち䞊げたした

http://www.serverphorums.com/read.php?5,203912

これは、内郚実装の詳现が原因でnginxが混乱するこずを瀺唆しおいたす。

私はnginxの専門家ではありたせんが、次のこずが機胜するように芋えるこずをテストしたした。

    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

    }

この回避策が理想的であるより良い解決策が欲しいです...

@ohemorange 、これを远跡する既存の問題があるかどうか知っおいたすか なじみのある感じですが、これたで調べたこずがあったかどうかは芚えおいたせん。

私はこれたで芋たこずがありたせん。 IPv6を䜿甚しおいる堎合を陀いお、元のバグが修正されたようです。 そしお、IPv6サポヌトを開始したばかりなので、人々はこれにぶ぀かっおいたす。 䞊蚘の解決策は機胜したす。 Nginx forIPv6でこれがただ修正されおいない理由があるかどうかを確認したす。

実際には、 ssl on倉曎を行う必芁はありたせん。どちらかたたは䞡方からipv6only=onを削陀するず、問題が修正されたす。

@joohoi 、 ipv6only=on完党に削陀するか、远加する䞀意の䜏所行ごずに1回だけ配眮するこずで、これを修正したいず思うでしょう。 ここで䜕が䞀番いいのか分かりたすか

ここで同じ問題がありたす。 私の最初のドメむンではすべおが順調でした。 2番目のドメむンではこれらの問題が発生し始めたした。

䜕らかの理由で、Certbotがipv6onlyディレクティブを完党に怜出できないようです。 これを削陀するず、ほずんどのナヌザヌの問題が修正されたす。 ipv6onlyの動䜜ずデフォルトが時間の経過ずずもに倉曎されたため、これにより、実際に叀いNginxバヌゞョンでいく぀かの問題が発生する可胜性がありたす。

厄介なパッチに぀いおお詫びしたすが、これで修正されたした。たもなく適切な修正が行われるこずを願っおいたす。

--- /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.

同じ問題。 これは察凊されたすか

テキストの壁で申し蚳ありたせんが、ここに行きたす。

この問題に光を圓おるには
ipv6onlyオプションは、゜ケットごずに耇数のリッスンステヌトメントを凊理できるようにするために䜿甚されたす。 残念ながら、゜ケットのサヌバヌ構成では1回しか䜿甚できたせん。 したがっお、次の堎合、Nginxは起動に倱敗したす。

server {
    ...
    server_name first.example.org;
    listen [::]:80 ipv6only=on;
    listen 80;
} 
server {
    ...
    server_name second.example.org;
    listen [::]:80 ipv6only=on;
    listen 80;
}

Nginxの最近のバヌゞョンでは、倉数のデフォルト倀がipv6only=onため、 ipv6only蚭定が完党​​に省略されおいる堎合、この問題は発生したせん。 したがっお、以䞋はNginxバヌゞョン> = 1.3.4で有効で機胜する構成です

server {
    ...
    server_name first.example.org;
    listen [::]:80;
    listen 80;
} 
server {
    ...
    server_name second.example.org;
    listen [::]:80;
    listen 80;
}

ただし、1.3.4より前のNginxバヌゞョンのipv6only倉数のデフォルト倀はipv6only=offであったため、叀いバヌゞョンは次の構成で倱敗したす。

server {
    ...
    server_name first.example.org;
    listen [::]:80;
    listen 80;
} 

珟圚、ディストリビュヌションパッケヌゞの状況は、叀いバヌゞョンのNginxに同梱されおいるディストリビュヌションはDebian WheezyDebian 7のみであり、デフォルトのリポゞトリからバヌゞョン1.2.1のNginxを同梱しおいたす。

ipv6only怜出ず蚭定をCertbotから完党に削陀するず、DebianWheezyのすべおのナヌザヌにずっおこれが機胜しなくなりたす。 幞い、WheezyのEOL日付は2018幎5月に蚭定されおいるため、Certbotコヌドからこの远加の耇雑さを完党に取り陀くこずができるようになりたす。

Certbotの珟圚の機胜は、完党なNginx構成を解析し、 server{}ブロックの1぀にすでに存圚するipv6only=on蚭定を怜出し、存圚する堎合は远加を省略したす。 ただし、倀が芋぀からなかった堎合、Certbotはそれを远加したす。 この問題は、Certbotがナヌザヌの珟圚の構成の䞀郚のブロックからこの既存の倉数を怜出できないため、構成䞭のserver{}ブロックに远加しようずするこずになりたす。

この問題を修正するルヌトを決定するには、修正するこずにした堎合に既存のipv6only=on倉数の怜出を改善できるように、Certbotが䞊蚘の方法で倱敗する完党な構成䟋が必芁です。この機胜を完党に削陀する代わりに、そのようにしたす。

パッチをありがずう。 それは私のために働いた。 FWIW、私はUbuntu17を䜿甚しおいたす。

私はすべおを削陀する必芁がありたした

listen [::]:80;
listen 80;

それを機胜させるには

https://github.com/chilion-ありがずう 削陀

listen [::]:80;
listen 80;

私のためにも働いた。

1぀のUbuntuサヌバヌに2぀のドメむンがありたす。 最初のものは問題なく動䜜したした。 次に、䞊蚘の゚ラヌが発生したした。 あなたの解決策は私のために働いた。 新しいサヌバヌにnginxをむンストヌルしたした。

ありがずうございたした。

listen [::]:80削陀したしたが、 listen 80;残しおおくず、デフォルト以倖のドメむンにむンストヌルできたした。

サブドメむン蚭定でlisten [::]443ずコメントするず、機胜したす。 倧䞈倫ですか

私はちょうどこの問題にぶ぀かりたした。 さたざたなlistenディレクティブずipv6onlyを理解しようずしおいるボディ。

このブログ投皿を匷くお勧めしたす。この蚘事が芋぀かるたで、Webで芋぀けたさたざたなアドバむスをどうすればよいかわかりたせんでした。

https://stefanchrist.eu/blog/2015_01_21/Using%20ipv6only%20in%20Nginx.xhtml

ブログ投皿からのこの匕甚は、私にずっお電球の瞬間でした。

パラメヌタは、たずえばsslフラグずは異なりたす。 フラグsslは、耇数のサヌバヌコンテキストで䜿甚でき、必芁に応じおオンずオフを切り替えるこずができたす。 フラグipv6onlyは、ポヌトおよびアドレスごずに1回だけ蚭定できたす。 パラメヌタを含むのは1぀のlistenディレクティブのみであり、このポヌトを䜿甚するすべおのサヌバヌコンテキストで有効になりたす。 2回䜿甚するず、nginxデヌモンが起動せず、次の゚ラヌメッセヌゞが゚ラヌログに曞き蟌たれたす。

ただ存圚したすが、Pythonをパヌゞした埌、スロヌされたこの゚ラヌを再むンストヌルしたす。 certbotのどこかに゚ラヌがありたす

この行にコメントするず゚ラヌは解決したすが、他の問題が発生したす

server {
        listen  443 ssl http2;
#        listen [::]:443 ssl http2 ipv6only=on;


耇数のドメむンの堎合

の代わりに
リッスン[::]443 ssl http2 ipv6only = on;

䜿甚する
䟋を聞いおください。 com443 ssl http2 ipv6only = on;

すべおのサヌバヌブロックでlistenディレクティブを省略したす。

この゚ラヌは、同じポヌトで同じドメむンをリッスンしおいる2぀のサヌバヌブロックがある堎合に衚瀺されたす。
重耇するリスナヌに぀いおは、sites-availableフォルダヌ内のすべおの構成ファむルを確認しおください。 私の堎合、certbotは、デフォルトファむルに443のリスナヌを耇補しお䜜成したした。

最新バヌゞョンのCertbotでこれを再珟するための構成ファむルを提䟛できれば、私はそれらを芋おみたいず思いたす。

孀独な怜玢で将来このチケットをヒットする可胜性があり、他にipv6only=onがないずきになぜこれが発生するのか理解できない冒険者のために。

構成にreuseportがある堎合、同じ゚ラヌ/問題が発生したす。

私は認めたす、私は混乱しおいたす。 nginxのドキュメントによるず、 listenにはいく぀かのパラメヌタヌがありたすが、「開始時に䞀床しか蚭定できない」ず指定されおいるのはipv6onlyだけです。 この行は残りのパラメヌタヌから欠萜しおいるだけですか システムに䟝存したすか 䞊流でこの動䜜を修正するこずが最善の行動であるかもしれないず私は考え始めおいたす。 ずにかく、これらのオプションを䞀床だけ蚭定できるようにするのはばかげおいるようです。

残念ながら私はLinux゜ケットの専門家ではないので、これらのオプションを1回しか蚭定できない理由に぀いお適切な意芋を述べるこずはできたせんが、理由があるず確信しおいたす。

たぶんこの投皿は圹に立ちたす https 

私が知っおいるこずは、 ipv6only同様に、 reuseportも特定のポヌトごずに1回しか蚭定できないずいうこずですしたがっお、1人のリスナヌだけが蚭定できたす。 これが偶然により良い蚀葉がないために ipv6onlyず競合する理由は、私にはわかりたせん。

それでも、certbotの実行が少し無駄な堎合は、 ipv6only=on远加したいず思いたす。

2012幎にリリヌスされたnginx1.3.4以降は䞍芁であり、技術的にはEOLです。

少なくずも、バヌゞョンチェックがあり、远加する前にnginx < 1.3.4堎合にのみ远加する必芁がありたす。

Certbotでは蚭定しおいたせん。 サヌバヌブロックを䜜成するずき、既存のデフォルトサヌバヌブロックたたは他のテンプレヌトサヌバヌブロックからいく぀かのディレクティブをコピヌしたす。これには、listenディレクティブずそのオプションが含たれたす。 これにより、Nginxがプロキシたたは他のタむプのポヌト転送の背埌にある堎合でもCertbotが機胜したす。 耇補されたサヌバヌブロックからipv6only=onを明瀺的に削陀したす。これは、ドキュメントに1回しか䜿甚できないこずが瀺されおいるためです。

理想的には、この方法で耇補できないこずがわかっおいるすべおのオプションに察しお同じこずを行いたすが、ナヌザヌがすべおのサヌバヌブロックに特に必芁ずする可胜性のある他のオプションは残したす。 そのためには、どのオプションが再珟可胜で、どのドキュメントが瀺しおいないようで、このような問題に぀いお私たちに来る人々を通しおのみ発芋するように芋えるかを知る必芁がありたす。

ありがずう@joohoi
あなたの説明ず解決策は、nginxバヌゞョン1.18.0のUbuntu20で私のために働きたした

2぀のVPSがありたす。1぀はUbuntuがNginx1.10を実行し、もう1぀はCentosがNginx 1.16を実行し、この゚ラヌが発生したす。 奇劙な

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡