[nginx] 配置全局 SSL 证书

陪她去流浪 桃子 2019年07月06日 编辑 阅读次数:4994

在网上能看到的关于 nginx 配置 HTTPS 的 SSL/TLS 证书文件的文章,大多数时候应该都是下面这样的,每个server配置独立的证书:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
    listen                  443 ssl http2;
    server_name             xxx;

    ssl_certificate         cert.crt;
    ssl_certificate_key     cert.key;
}

server {
    listen                  443 ssl http2;
    server_name             yyy;

    ssl_certificate         cert.crt;
    ssl_certificate_key     cert.key;
}

server {
    listen                  443 ssl http2;
    server_name             zzz;

    ssl_certificate         cert.crt;
    ssl_certificate_key     cert.key;
}

这种情况用于每个服务器(server)不在同一级域名下或者都使用不同的证书的配置,也可以简单说成是独立网站。

如果这台主机上面的所有域名都共享同一个证书文件,比如我,所有***.twofei.com**的服务器使用相同的证书,那么,上面的配置可以简化一下,降低维护成本,把精力拿去做更多更有意义的事。

nginx文档上面关于ssl_certificatessl_certificate_key的语法如下:

Syntax:     ssl_certificate file;
Default:    —
Context:    http, server

Syntax:     ssl_certificate_key file;
Default:    —
Context:    http, server

可以看到,这两个指令(directive)都是可以在httpserver两个上下文(Context)中使用的。 所以,如果当前http下的所有server共用相同的证书,那么,可以直接在http下面配置一次即可。

1
2
3
4
http {
    ssl_certificate       cert.crt;
    ssl_certificate_key   cert.key;
}

然后,其它的位于server中的就可以删掉了。如果也配置了,会覆盖掉http中的相同配置。

通常,nginx只有一个http配置块,这个配置块在nginx.conf中。

标签:nginx · 证书 · TLS