在  Nginx  中,为多个域名配置国密证书,核心思路就是为每个域名创建独立的虚拟主机配置,并利用  SNI  技术让服务器根据域名自动选择对应的证书。这与普通  SSL证书的配置逻辑完全一致,只是将证书替换为国密版本。

方案一:为多个域名配置独立的Server块

这是最常见、最清晰的配置方式。你需要为每个需要独立的国密证书的域名,创建一个独立的  `server`  块。

核心参数都由  `ssl_certificate`  和  `ssl_certificate_key`  变为分别对应签名证书/私钥和加密证书/私钥。示例如下:

nginx

#  第一个域名:  domain1.com

server  {

        listen  443  ssl;

        server_name  domain1.com;  #  填写你的第一个域名

        #  国密签名证书和私钥

        ssl_certificate  /path/to/domain1_sign.crt;

        ssl_certificate_key  /path/to/domain1_sign.key;

                #  国密加密证书和私钥

        ssl_certificate  /path/to/domain1_encrypt.crt;

        ssl_certificate_key  /path/to/domain1_encrypt.key;

        #  ...  其他通用SSL配置  ...

}

#  第二个域名:  domain2.com

server  {

        listen  443  ssl;

        server_name  domain2.com;  #  填写你的第二个域名

        #  国密签名证书和私钥

        ssl_certificate  /path/to/domain2_sign.crt;

        ssl_certificate_key  /path/to/domain2_sign.key;

        

        #  国密加密证书和私钥

        ssl_certificate  /path/to/domain2_encrypt.crt;

        ssl_certificate_key  /path/to/domain2_encrypt.key;

        #  ...  其他通用SSL配置  ...

}

注意:一个证书只能用于它绑定的特定域名,不能跨域名复用。

方案二:对每个域名配置Dual  Server块以实现双证书自适应(国密/RSA)

如果你的用户可能使用不支持国密算法的浏览器,可以配置双证书自适应方案来确保网站对所有人都可访问:为每个域名分别创建两个  `server`  块,一个用于国密证书,一个用于普通SSL证书

这样当支持国密的浏览器访问时,服务器会自动选择国密证书通信;反之则使用RSA证书通信。

nginx

#  第一个域名  domain1.com  的国密证书配置

server  {

        listen  443  ssl;

        server_name  domain1.com;

        ssl_certificate  /path/to/domain1_sign.crt;

        ssl_certificate_key  /path/to/domain1_sign.key;

        ssl_certificate  /path/to/domain1_encrypt.crt;

        ssl_certificate_key  /path/to/domain1_encrypt.key;

        #  ...  国密专用SSL配置  ...

}

#  第一个域名  domain1.com  的RSA证书配置

server  {

        listen  443  ssl;

        server_name  domain1.com;

        ssl_certificate  /path/to/domain1_rsa.crt;

        ssl_certificate_key  /path/to/domain1_rsa.key;

        #  ...  RSA  SSL配置  ...

}

配置关键点与验证

1.  检查SNI支持:Nginx在  0.5.23  版本后就支持SNI,只需确保编译时包含了  `--with-http_ssl_module`。

2.  测试并重载:执行  `nginx  -t`  测试语法,如无误则执行  `nginx  -s  reload`  重载配置。

3    快速验证:使用  `openssl  s_client  -connect  domain1.com:443  -servername  domain1.com`  命令,检查返回的证书信息是否与预期一致。

常见问题排查

      启动或配置报错:首先确认所有证书文件路径正确且有读权限,其次检查是否满足所有  `listen`  端口未被占用的基础条件。

      域名访问证书错误:使用  `nginx  -T`  查看生效配置,确认  `server_name`  与实际域名、证书文件路径是否严格匹配。

      HTTP自动跳转HTTPS:这是常见的需求,可通过以下配置实现。

        nginx

        server  {

                listen  80;

                server_name  domain1.com  domain2.com;

                return  301  https://$host$request_uri;

        }

    证书文件路径与更新:建议将证书放置在  `/etc/nginx/ssl/`  下按域名分目录管理,方便维护。更新时,先上传新证书覆盖旧文件,再执行  `nginx  -s  reload`  即可。

总结与建议

配置多域名国密证书的核心就是为每个域名创建独立的  `server`  块。建议优先使用方案一,维护简单,逻辑清晰。如果同时要保证浏览器兼容性,可选用方案二(Dual  Server),实现双证书自适应。