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

经过一番研究,我怀疑答案可能不会,不过我会问的。 情况是有NGINX前端作为apache后端的反向代理。 我的问题是 是否有可能转发/redirect/ …一个HTTPS的请求到一个正常的HTTP请求?

EG: https ://foobar.com前端请求是否可以将请求转发/redirect到http://foobar.com而无需浏览器投诉,需要证书或SSL进程在手之前完成?

我希望不要! 在这种情况下,浏览器所使用的SSL的要点是要validation正在加载的页面。 因此,在他们处理页面上的任何内容(包括任何types的redirect)之前,他们将协商SSL连接并检查您的证书。

完全没有理由去做你想做的事情,而且这是不可能的。 要么获得一个证书(在这一点上,你还可以继续使用HTTPS进行连接),或者不要发布https:// URL。

所以你需要一个从端口443到端口80的redirect。一个可以通过使用iptables或者在端口443上用redirect创build一个非SSL服务器。 但我不知道各种浏览器会如何反应…
Personnaly我只是不会运行在端口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 

用你的networking接口名称replace<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 / { ... } } 

这应该创build到端口80和443上的HTTP(非HTTPS)服务器.443上的连接redirect到端口80上。也许添加ssl off; 在服务器443块上,如果上述不起作用。