nginx https -> http 重定向使用通配符错误

nginx https -> http 重定向使用通配符错误

我已经搜索了整个网络寻找答案,但不幸的是没有。我希望这里有一个天才。

背景:我的 nginx 充当服务多个域的反向代理

问题:当非 SSL 域被迫使用 https 时,会出现问题,我试图强制重定向回 http,但在处理重定向之前会出现 SSL 错误

行为:

  • 在隐身模式下,网络浏览器在 Chrome 上显示错误:“这可能不是您要查找的网站!您尝试访问 xxxx.com [客户端网站],但实际上您访问的服务器标识为 proxydomain.com [代理身份]。”
  • 仅当您单击“仍然继续”时,浏览器才会执行重写重定向

当前正在生产但出现错误的配置文件:

server {
       listen 443 ssl;
       server_name _;

       ssl_certificate      conf.d/proxydomain_com.pem;
       ssl_certificate_key  conf.d/proxydomain_com.key;

       rewrite ^(.*)$ http://$host$request_uri permanent;
 }

尝试的解决方案: https://stackoverflow.com/questions/3893839/如何将https请求重定向到http-in-nginx/3915822#3915822

  • 它抱怨这个域名的 SSL 证书无效(显然),但如果我删除 ssl_certificate 属性(错误 ssl_error_bad_cert_domain)
  • 如果我尝试删除 listen 属性中的“ssl”,则会收到 ssl_error_rx_record_too_long

在这上面花了 4 个小时,有什么想法吗?

非常感谢 :)

答案1

重定向将在 HTTP 协议中完成。HTTPS 是包装在 SSL 连接内的 HTTP,因此如果由于证书错误而导致 SSL 连接建立失败,则永远不会重定向到 http://。因此,要使其正常工作,您必须使用客户端接受的证书,例如匹配主机名并由受信任的 CA 颁发的证书。

如果您关闭 SSL,它将只在端口 443 上启动一个普通的非 SSL http 服务器,但浏览器将尝试使用 SSL,因此您会收到有关 record_too_long 的错误。

答案2

检查日志文件,如果看到类似以下内容:

46.17.57.175 - - [15/Oct/2015:11:15:00 -0400] "\x80t\x01\x03\x01\x00K\x00\x00\x00 \x00\x009\x00\x008\x00\x005\x00\x00\x16\x00\x00\x13\x00\x00" 400 166 "-" "-"

这是由于 TLS 过期而导致的 SSL 连接失败。技巧/处理方法是 nginx 检测到它并返回“400”错误。您始终可以捕获这些错误,过滤它们并为访问者执行您想要的操作。(IP/请求记录是用于测试 TLS 连接的 openVAS 安全探测器)

相关内容