nginx配置https服务器

本文介绍了如何在nginx中配置HTTPS服务器,包括获取签名证书、优化SSL配置以减少CPU资源消耗,如设置keepalive参数和复用SSL会话。同时,文章探讨了配置多个HTTPS服务器监听同一IP和端口时的挑战,如服务器选择问题,以及解决这个问题的两种方法:监听不同端口或使用TLS Server Name Indication extension。此外,还提到了服务器之间共享签名证书的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 简单的https配置
    前提:获取签名证书 https自制签名证书
    注意:签名证书是公开对象,它被发送给连接到服务器的每个客户端。私钥是不公开对象,应该存储在有严格访问限制的文件(nginx的主进程可读)中。 私钥可以存储在与证书相同的文件中(只有证书需要被发送到客户端)
server {
	#开启ssl监听
    listen	443 ssl;
    server_name	www.example.com;
    #证书绝对路径
    ssl_certificate	www.example.com.crt;
    ssl_certificate_key	www.example.com.key;
    #ssl支持协议版本,加密算法(均为默认缺省配置)
    ssl_protocols	TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers	HIGH:!aNULL:!MD5;
    ...
}
  • https配置优化
    消耗:ssl配置会消耗额外的cpu资源,在nginx每个独立运行的work process进程中,cpu占用最多的操作是ssl握手
    方式一:配置keepalive参数,允许tcp长连接,并在同一个tcp连接上发送多个请求
    方式二:复用ssl会话参数,避免ssl频繁握手。会话存储在ssl会话高速缓存中,worker process进程间可共享,由ssl_session_cache指令配置,1m缓存包含大约4000个会话,默认缓存超时为5分钟,可以使用ssl_session_timeout指令修改
worker_processes auto;

http {
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
        listen              443 ssl;
        server_name         www.example.com;
        keepalive_timeout   70;

        ssl_certificate     www.example.com.crt;
        ssl_certificate_key www.example.com.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        ...
  • ssl证书链 略

  • 配置server同时监听http、https

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ...
}
  • 监听相同ip、port的https servers
    bug:nginx在建立ssl连接时,只选择default server
    ①客户端发起https请求 ②nginx发送默认server中配置的证书项到客户端并建立ssl连接 ③ssl连接建立后客户端才发送http头信息(包含host),nginx原本判断server处理的方式是相同ip、port前提下通过host头进行server选择,但在建立连接之前nginx没有接收到http请求头故无法判断适用的server,只能选择默认server处理客户端连接和请求
    解决方式一
    一般解决办法是不同server监听不同https端口
    解决方式二
    TLS Server Name Indication extension,简单讲就是在建立连接之前,客户端携带有关server name信息到服务器
server {
    listen          192.168.1.1:443 ssl;
    server_name     www.example.com;
    ssl_certificate www.example.com.crt;
    ...
}

server {
    listen          192.168.1.2:443 ssl;
    server_name     www.example.org;
    ssl_certificate www.example.org.crt;
    ...
}
  • servers共享签名证书
    在servers之间共享签名证书:①可以使用通配符server_name配置方式,或者多配置几个server name(有限个) ②将证书项配置到上层http指令中
ssl_certificate     common.crt;
ssl_certificate_key common.key;

server {
    listen          443 ssl;
    server_name     www.example.com;
    ...
}

server {
    listen          443 ssl;
    server_name     www.example.org;
    ...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值