经过一番研究,我怀疑答案可能是否定的,但我还是会问。情况是 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 上添加块。