2014-02-11 186 views
1

我使用nginx的一个Ubuntu的服务器上托管多个网站。基本上我的设置如下。Nginx的非HTTPS的网站重定向到其他网站HTTPS

我的第一个域(启用SSL)example1.com可以从http://example1.com以及来自​​进行访问。 这工作正常。

但我的第二个域example2.com,我没有启用SSL - 但是当我键入https://example2.com网址重定向到第一个域​​- 哪项是错误

现在目前我已经加入此服务块如果有人在URL与https://键入它会重定向到http://same domain。但这不是解决这个问题的正确方法。有没有人有更好的想法?

server { 
    listen 443 ssl; 
    server_name example2.com www.example2.com; 
    rewrite^ http://$server_name$request_uri? permanent; 
} 

回答

1

这里的问题是,你只使用一个单一的IP地址(服务器端),并依靠TLS Server Name Indication扩展(客户端)。如果没有其他可用于处理请求的情况,Nginx将始终使用您的默认HTTPS服务器。

您的解决方案看起来对我来说相当合适,但如果你没有有效的证书,它会产生对客户端的错误。唯一的另一种可能性是创建一个默认的无效HTTPS服务器,它只是简单地删除连接尝试。但我想这不是你想要的。

server { 
    listen  443 ssl; 
    server_name example2.com *.example2.com; 
    return  301 http://$server_name$request_uri; 
} 

如果您在这样的位置重定向,请始终使用return

默认无效包罗万象的配置可能如下所示:

server { 
    listen    443 ssl; 
    server_name   _; 
    ssl_certificate  blank.crt; 
    ssl_certificate_key blank.key; 
    return    403; 
} 

正如我所说的,它只会降大任于连接尝试不包含在提交的头,或者如果一个有效的HTTP主机在头中提交的HTTP主机无效。

+0

感谢您的建议 - 我会看看。 – randika

+0

增加了一个样例空白捕获所有配置;但我想你不需要也不想要那样。 – Fleshgrinder

+0

只要它不会破坏任何东西,我不介意尝试与空白证书:)第二种方法 - 你的时间@fleshgrinder – randika

0

具有以下将监听443(SSL),因为你没有一个SSL证书这一领域,nginx的将使用第一个或默认SSL证书,这将引发无效域错误。只需将其删除,以便它不会在443(SSL)上进行收听。

server { 
    listen 443 ssl; 
    server_name example2.com www.example2.com; 
    rewrite^ http://$server_name$request_uri? permanent; 
} 
+0

嗯,我就是用这来重定向任何HTTPS请求为HTTP。如果我不使用这个块,那么example2.com的任何请求会转到example1.com – randika

相关问题