web-dev-qa-db-ja.com

1つのサブディレクトリを除くすべての要求をHTTPSにリダイレクトする

自己署名証明書からnginxウェブサーバーのLet's Encrypt証明書に移動しようとしています。

現在、すべてのリクエストをhttp/80https/443にリダイレクトします。これは、少し前に作成した自己署名証明書を使用します。

今-私が理解していることから、Let's Encryptはポート80にリクエストを出します(webrootcertbotオプションを使用しているため)。これらの要求はリダイレクトされるため、証明書の生成が失敗します。

ポート80でリッスンする次のサーバーブロックでこれを実現しようとしました。

server {
        listen  80;     
        server_name     sub.domain.tld;
        server_tokens   off;


        location /.well-known {
                root /var/www/letsencrypt;
        }

        location / {
                return 301 https://$Host$request_uri;
        }
}

ただし、/.well-knownへのリクエストはhttps/443にリダイレクトされます。

http/80へのリクエストを除くすべてのリクエストをhttps/443から/.well-known/にリダイレクトするにはどうすればよいですか?

13
SaAtomic

これを試して:

server {
    listen  80;     
    server_name     sub.domain.tld;
    server_tokens   off;

    root /var/www/letsencrypt;

    location /.well-known {
        try_files $uri $uri/ =404;
    }

    location / {
        return 301 https://$Host$request_uri;
    }
}

仮想サーバーにtry_filesエントリがなかったため、/.well-knownに送信されたリクエストをどう処理するかがわかりませんでした。

17
Tero Kilkanen