nginx 前端转发 HTTPS 到 HTTP,没有有效证书

nginx 前端转发 HTTPS 到 HTTP,没有有效证书

经过一番研究,我怀疑答案可能是否定的,但我还是会问。情况是 NGINX 前端充当 apache 后端的反向代理。我的问题是;是否可以将对 HTTPS URL 的请求转发/重定向/... 到普通 HTTP URL?

例如:前端收到一个请求https://foobar.com是否可以将请求转发/重定向/...至http://foobar.com没有浏览器抱怨,需要事先完成证书或 SSL 过程?

答案1

我希望不会!在这种情况下,浏览器使用 SSL 的全部目的是验证它们正在加载的页面。因此,在处理您页面上的任何内容(包括任何类型的重定向)之前,它们将协商 SSL 连接并检查您的证书。

您完全没有理由去做您想做的事情,而且这是不可能的。要么获取证书(此时,您不妨继续使用 HTTPS 进行连接),要么不要提供 https:// URL。

答案2

因此,您需要从端口 443 重定向到端口 80。可以使用 iptables 或在端口 443 上创建带有重定向的非 SSL 服务器来实现这一点。但我不确定各种浏览器对此会有何反应...
就我个人而言,我不会在端口 443 上运行服务器。只监听端口 80。这不会破坏“SSL”信任。

iptables
假设您允许端口 80 和 443 上的传入连接。因此您需要执行以下操作:

iptables -t nat -A PREROUTING -i <net_if> -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 80

替换<net_if>为您的网络接口名称(例如 eth0)

NGINX 在端口 443 上运行“HTTP”服务器:

server {
  listen 443;
  server name foobar.com;

  return 301 http://$host$request_uri;
}

server {
  listen 80 default_server;
  server name foobar.com;

  location / {
    ...
  }
}

这应该在端口 80 和 443 上创建 HTTP(非 https)服务器。443 上的连接将重定向到端口 80。ssl off;如果上述方法不起作用,也许可以在服务器 443 上添加块。

相关内容