nginx:如何在仍然通过 http 提供一个目录的同时重定向到 https?
nginx: how to redirect to https while still serving one directory via http?
我想阻止人们通过 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]
它将提供文件(如果找到)或 return 418 错误,同时将所有其他请求升级到不以 https 开头的/.well-known/acme-challenge
?感谢您的任何建议
return 301
在服务器范围内,这不是您想要的。将 return
放在默认位置:
location / {
return 301 https://$server_name$request_uri;
}
我想阻止人们通过 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]
它将提供文件(如果找到)或 return 418 错误,同时将所有其他请求升级到不以 https 开头的/.well-known/acme-challenge
?感谢您的任何建议
return 301
在服务器范围内,这不是您想要的。将 return
放在默认位置:
location / {
return 301 https://$server_name$request_uri;
}