我有两个相同的域,由虚拟主机site.com
和additional.com
提供服务。我只有第一个SSL证书,并不真正想要另一个。当用户尝试登录时,我正在进行永久重定向:
server {
listen 443;
server_name additional.com;
rewrite ^/(.*) https://site.com permanent;
}
...
server {
listen 80;
server_name site.com additional.com;
root /home/site/production/public;
location / {
...
}
}
server {
listen 443;
server_name site.com;
ssl on;
...
}
这失败了,因为我获得了代理上行链路服务器的SSL流量,并且它无法处理它,因为它只会与HTTP进行通信SSL23_GET_SERVER_HELLO:unknown protocol
(对于Chrome; Firefix和curl的错误消息略有不同)。
所以我不得不把它改成(注意http,而不是这里的https):
server {
listen 443;
server_name additional.com;
rewrite ^/(.*) http://site.com permanent;
}
错误不再出现,但是当进入/登录页面(应该是安全的并且上行链路重定向到HTTPS)时,它不会被重写,说明证书无效。如果您确认安全例外,则会重定向到site.com
目标网页,并且需要第二次点击login
链接。
如何正确设置从https://additional.com/login
到指向https://site.com
的重定向?
答案 0 :(得分:1)
如果你想从HTTPS重定向到HTTPS,你将需要一个SSL证书用于旅程的每一步,我担心。没办法 - 至少要消除你的错误。
那就是说......试试你的重写:
rewrite ^/(.*) https://site.com/$1 permanent;
这应保持使用的路径。
答案 1 :(得分:1)
我已经发现所有443
应该是443 ssl
并且重写有效(感谢@Sebastien指出/$1
):
server {
listen 443 ssl;
server_name additional.com;
rewrite ^/(.*) https://site.com/$1 permanent;
}