为什么监听`443 default_server ssl`适用于nginx中的多个服务器名称?

时间:2011-09-14 20:08:00

标签: ssl nginx

我为静态内容运行nginx,并作为服务django的Apache / mod_wsgi的代理。我有example.com和test.example.com作为Apache / Django和static.example.com的代理,它直接通过nginx提供所有静态文件。我有一个通配符SSL证书,因此每个子域都可以使用SSL(我只有一个IP)。

为什么在 test.example.com example.com中使用listen 443 default_server ssl;时,SSL适用于两者但我必须明确地监听对于static.example.com来说是443吗?

ssl_certificate         /etc/ssl/certs/example.chained.crt;
ssl_certificate_key     /etc/ssl/private/example.key;

server {
    listen      80;
    listen      443;
    server_name static.example.com;
    # ... serves content ...
}

server {
    listen       80;
    listen      443 default_server ssl;
    server_name  example.com;
    # ... proxy pass to http://example.com:8080 (apache) ...
}
server {
    listen      80;
    # why don't I need `listen 443;` here?
    server_name test.example.com;
    # ... proxy pass to http://test.example.com:8080 (apache) ...
}

1 个答案:

答案 0 :(得分:3)

SSL协议本身(没有SNI扩展名)使用服务器的IP地址来请求SSL证书。使用SNI它还会传递主机名(不适用于Win XP),但这不应该与此相关。

服务器指令不完全匹配。这是“最接近”的比赛。它可能看起来“有效”,但可能最终出现在错误的服务器指令中。没有任何更多信息,比如服务器根目录,很难说清楚。

由于您似乎使用单个IP地址,因此这一点始终有效。