我想阻止人们通过http使用我的网站并强制他们使用安全连接。我的https证书由letsencrypt(通过webroot选项)发出,这意味着他们通过http连接,我从/.well-known/acme-challenge/
提供静态内容。应将所有其他请求重定向为使用https。关注我的nginx.conf的相关部分
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]
它将在发现时提供文件或返回418错误,同时将所有其他请求升级到不以/.well-known/acme-challenge
开头的https?感谢您的任何建议
答案 0 :(得分:2)
return 301
在服务器范围内,这不是您想要的。将return
放在默认位置:
location / {
return 301 https://$server_name$request_uri;
}