nginx catch-all すべてをキャッチする

nginx catch-all すべてをキャッチする

こんにちは、このデフォルトファイルを入手しました

server {
    listen 80 default_server;
    listen 443 default_server;
    listen [::]:80 default_server;
    listen [::]:443 default_server;
    server_name _;
    return 444;
}

これはすべてをキャッチします...同じフォルダ(サイトが有効)でdomain.comファイルを取得しました

server {
    listen 80;
    server_name my.domain.com;
    location /.well-known/acme-challenge {
        default_type "text/plain";
        root /storage/webserver/certbot;
    }
    #Forces all other requests to HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    listen 443 ssl http2;
    server_name my.domain.com;
    ## SSL STUFF ##
    root /path/to/root;
    index index.html index.php;

    location / {
        try_files $uri $uri/ $uri.html;
    }


    ### Site config
}

デフォルトを無効 (削除) のままにして、my.domain.com にアクセスすると、自分のページが表示されます。ここで、デフォルト ファイルを追加すると、Nginx から 444 (Closed) が返されます。なぜでしょうか。

編集: いくつかテストした後、問題は listen 443 default_server; 部分にあることがわかりました。この部分はすべての https リクエストをキャッチしますが、なぜでしょうか? 自分のドメインでブロックされていて、listen 443 です。

答え1

この回答によるとhttps://serverfault.com/a/841646/459947

catch_all に証明書を追加する必要がありました。自己署名証明書でそれを行った後、自分の IP で 444 (ブロックがないので正しい) と SSL 警告が表示され、自分の IP を HTTPS で受け入れると 444 が表示されます。これでうまくいきましたが、もっと良い方法があればいいのにと思います。

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate <path to cert>
    ssl_certificate_key <path to key>
    return 444;
}

によるとhttps://serverfault.com/a/593668/459947あなたはもしドメインが正しいかどうかをチェックするためにブロックに追加します。つまり、うまくいくと思いますが、各ブロックにそれを追加するのは望ましくありません。これがより良いアイデアだと思う場合は、お知らせください。

関連情報