Nginx重定向到SSL上的主域

时间:2013-04-09 08:50:16

标签: ssl nginx

我有两个相同的域,由虚拟主机site.comadditional.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的重定向?

2 个答案:

答案 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;
}