2017-03-19 1 views
1

私は人々がhttpを介して自分のサイトを使用することを防ぎ、彼らに安全な接続を使用させたいと考えています。私のhttps証明書は、(webrootオプションを使用して)letsencryptによって発行されます。つまり、http経由で接続すると、/.well-known/acme-challenge/の静的コンテンツが提供されます。他のすべてのリクエストは、httpsを使用するようにリダイレクトする必要があります。私nginx.confnginx:httpを介して1つのディレクトリにサービスを提供しながらhttpsにリダイレクトする方法は?

server { 
    listen 80; 
    listen [::]:80; 
    server_name example.com www.example.com admin.example.com; 
    location /.well-known/acme-challenge { 
     root /app; 
     access_log on; 
     try_files $uri $uri/ =418; 
    } 

    return 301 https://$server_name$request_uri; 
} 

の関連部分に続いて、このHTTPSのアップグレードが正常に動作し、意図したように、すべてのユーザーがHTTPS接続を取得します。問題は、nginxがletsencryptからのものであっても、letsencryptが失敗する原因となったものであっても、すべてのリクエストをアップグレードすることです。ファイルを提供しようとしません。

リクエストがhttpによってexample.com/.well-known/acme-challenge/[HASH]に送信された場合、ファイルが見つかった場合にそのファイルが提供されるか、4134エラーが返され、他のすべてのリクエストは同時に/.well-known/acme-challengeで始まるhttpsにアップグレードされます。何か提案ありがとう

答えて

2

return 301は、あなたが望むものではないサーバースコープにあります。デフォルトの場所内returnを置き:

location/{ 
    return 301 https://$server_name$request_uri; 
} 
+0

これは私が持っていたものであるように、それは「もともと」、夜遅くになっている必要がありますが、何かが私は私が見つけたリソースに基づいて、それを変更して動作しませんでした。今すぐ起きて、これは明らかに期待どおりに動作します!私にトンネルからの光を見せてくれてありがとう;) – japrescott

関連する問題