1つのサブディレクトリを除くすべてのリクエストをHTTPSにリダイレクトします


12

自己署名証明書からnginx Webサーバーの証明書を暗号化しようとしています。

現在、私はへのすべての要求をリダイレクトhttp/80するhttps/443私はしばらく前に作成した自己署名証明書を使用しています、。

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

ポート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-knownhttps/443とにかくリダイレクトされます。

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


1
私が知る限り、webrootof certbotオプションには単純なhttpが必要です。
-SaAtomic

2
リダイレクトをどのように確認しましたか?お使いのブラウザはドメインのHSTSヘッダーを尊重していると思いますが、ボットを暗号化して無視してみましょう。確認してくださいwget/curl
アレクセイテン

回答:


16

これを試して:

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


2
locationディレクトリtry_filesからファイルを送信するだけではありませんroot
アレクセイ10年

1
奇妙なことに、私はまったく同じ状況にあり、私は使用try_filesしてはいけません。実際、私は質問で述べたのとまったく同じ構成を持っています。location /.well-known/代わりに違いがあるだけですlocation /.well-known(末尾のスラッシュに注意してください)。それで問題はどこにあるのでしょうか?
オルケルダーマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.