![nginx https -> http 重定向使用通配符错误](https://linux22.com/image/631893/nginx%20https%20-%3E%20http%20%E9%87%8D%E5%AE%9A%E5%90%91%E4%BD%BF%E7%94%A8%E9%80%9A%E9%85%8D%E7%AC%A6%E9%94%99%E8%AF%AF.png)
我已经搜索了整个网络寻找答案,但不幸的是没有。我希望这里有一个天才。
背景:我的 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 安全探测器)