Nginx设置TCP上游服务器的SSL配置

本文介绍了如何为NGINX Plus和接受TCP连接的负载均衡的服务器组设置SSL

什么是SSL终端

SSL终端意味着NGINX Plus充当与客户端连接的服务器端SSL端点:它执行对请求的解密和对响应的加密,否则后端服务器就必须这样做。该操作称为终止,因为NGINX Plus关闭了客户端连接,并通过新创建的未加密连接将客户端数据转发到上游组中的服务器。在R6和更高版本中,NGINX Plus对TCP连接和HTTP连接执行SSL终止。

先决条件

  • NGINX Plus R6 NGINX Plus或更高版本
  • 具有多个TCP服务器的负载均衡的上游组
  • SSL证书和私钥(获取或自行生成)

获取SSL证书

首先,您将需要获取服务器证书和私钥,并将它们放在服务器上。可以从可信证书颁发机构(CA)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。

配置NGINX Plus

要配置SSL终止,请在NGINX Plus配置中添加以下指令:

启用S​​SL

要启用SSL,请为将连接传递到上游服务器组的TCP服务器指定指令的ssl参数listen

stream {server {listen     12345 ssl;proxy_pass backend;#...}
}

添加SSL证书

要添加SSL证书,请使用ssl_certificate指令指定证书的路径(必须采用PEM格式),并在指令中指定私钥的路径ssl_certificate_key

server {#...ssl_certificate        /etc/ssl/certs/server.crt;ssl_certificate_key    /etc/ssl/certs/server.key;
}

此外,ssl_protocolsand ssl_ciphers指令可用于限制连接并仅包括SSL / TLS的强版本和密码:

server {#...ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers    HIGH:!aNULL:!MD5;
}

ssl_ciphers指令告诉NGINX通知SSL库它喜欢哪种密码。

加快安全的TCP连接

实施SSL / TLS可能会严重影响服务器性能,因为SSL握手操作(客户端和服务器交换一系列消息以验证连接是否可信任)会占用大量CPU。SSL握手的默认超时为60秒,可以使用ssl_handshake_timeout伪指令重新定义。我们不建议将此值设置得太低或太高,因为这可能导致握手失败或等待握手完成的时间较长:

server {#...ssl_handshake_timeout 10s;
}

优化SSL会话缓存

创建适用于每个SSL / TLS连接的会话参数的缓存可以减少握手次数,从而可以显着提高性能。缓存是通过ssl_session_cache伪指令设置的:

ssl_session_cache;

默认情况下,NGINX Plus使用built-in会话缓存的类型,这意味着您的SSL库中内置了缓存。这不是最佳选择,因为这样的缓存只能由一个工作进程使用,并且可能导致内存碎片。设置ssl_session_cache指令以shared在所有工作进程之间共享缓存,这可以加快以后的连接速度,因为连接设置信息是已知的:

ssl_session_cache shared:SSL:1m;

作为参考,一个1 MB的共享缓存可以容纳大约4,000个会话。

默认情况下,NGINX Plus将缓存的会话参数保留五分钟。将的值ssl_session_timeout增加到几个小时可以提高性能,因为重新使用缓存的会话参数可以减少耗时的握手次数。当您增加超时时,缓存需要更大,以容纳产生的更多缓存参数。对于以下示例中的4小时超时,适合使用20 MB的缓存:

ssl_session_timeout 4h;

如果超时长度增加,则需要更大的缓存来存储会话,例如20 MB:

server {#...ssl_session_cache   shared:SSL:20m;ssl_session_timeout 4h;
}

这些行创建了一个20 MB的内存中高速缓存来存储会话信息,并指示NGINX Plus在添加会话参数后的4小时内重新使用高速缓存中的会话参数。

会话票证 Session_Tickets

会话票证是会话缓存的替代方法。会话信息存储在客户端,因此无需服务器端缓存即可存储会话信息。当客户端恢复与后端服务器的交互时,它会显示会话票证,并且不需要重新协商。将ssl_session_tickets指令设置为on

server {#...ssl_session_tickets on;
}

将会话票证用于上游组时,必须使用相同的会话密钥初始化每个上游服务器。最佳做法是经常更改会话密钥,我们建议您实施一种机制,以在所有上游服务器之间轮换共享密钥:

server {#...ssl_session_tickets on;ssl_session_ticket_key /etc/ssl/session_ticket_keys/current.key;ssl_session_ticket_key /etc/ssl/session_ticket_keys/previous.key;
}

完整的例子

stream {upstream stream_backend {server backend1.example.com:12345;server backend2.example.com:12345;server backend3.example.com:12345;}server {listen                12345 ssl;proxy_pass            stream_backend;ssl_certificate       /etc/ssl/certs/server.crt;ssl_certificate_key   /etc/ssl/certs/server.key;ssl_protocols         SSLv3 TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers           HIGH:!aNULL:!MD5;ssl_session_cache     shared:SSL:20m;ssl_session_timeout   4h;ssl_handshake_timeout 30s;#...}
}

在此示例中,该server块中的指令指示NGINX Plus终止并解密来自客户端的安全TCP流量,并将未加密的流量传递给stream_backend由三台服务器组成的上游组。

伪指令的ssl参数listen指示NGINX Plus接受SSL连接。当客户端请求安全的TCP连接时,NGINX Plus将启动握手过程,该过程将使用ssl_certificate指令指定的PEM格式证书,指令指定的证书私钥以及and 指令ssl_certificate_key列出的协议和密码。ssl_protocolsssl_ciphers

一旦建立了安全的TCP连接,NGINX Plus就会根据ssl_session_cache指令缓存会话参数。在该示例中,会话高速缓存在所有工作进程(shared参数)之间共享,大小为20 MB(20m参数),并且将每个SSL会话保留4小时以供重用(ssl_session_timeout指令)。

要了解有关NGINX Plus的更多信息,请参阅我们的商业订阅的描述。

Nginx设置TCP上游服务器的SSL配置相关推荐

  1. Nginx加密与上游服务器的TCP网络通信

    Nginx加密与上游服务器的TCP网络通信 本文介绍了如何保护NGINX和TCP上游服务器或TCP服务器上游组之间的TCP通信. 先决条件 NGINX Plus R6和更高版本或使用--with-st ...

  2. 通过注册表设置VMware Horizon View Client SSL配置

    原创作者:运维工程师 林琪 通过注册表设置VMware Horizon View Client SSL配置 注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\VMware,Inc. ...

  3. rtx服务器设置 文件,rtx 服务器 文件传输 配置

    rtx 服务器 文件传输 配置 内容精选 换一换 该任务指导用户使用Loader将数据从HBase导出到SFTP服务器.创建或获取该任务中创建Loader作业的业务用户和密码.确保用户已授权访问作业执 ...

  4. nginx负载均衡,服务器集群配置,服务器挂机自动切换

    1. 首先打开nginx/conf/nginx.conf修改如下配置 http {#在http中添加下面内容#隐藏 Nginx 的版本号,提高安全性. server_tokens off;#指令指定允 ...

  5. nginx 代理tcp长连接短连接配置

    nginx使用ngx_stream_core_module模块代理tcp长连接短连接,可以增强服务器的容灾能力 下面是一个配置信息,自己也方便记录一下

  6. nginx设置代理后端服务器增加前缀

    需求背景 有时候我们需要这样一个操作,线上是请求/aaa/bbb/ccc 但是我们线下测试的时候为了不影响已有服务,增加了一个path为 /ddd/aaa/bbb/ccc这样的 也就是我们后端代理的时 ...

  7. Nginx使用HTTPS建立与上游服务器的网络通信

    Nginx使用HTTPS建立与上游服务器的网络通信 本文介绍了如何加密NGINX与上游组或代理服务器之间的HTTP通信. 先决条件 NGINX开源或NGINX Plus 甲代理服务器或服务器的上游组 ...

  8. Nginx的TCP运行时健康检查

    Nginx的TCP运行时健康检查 本章介绍如何配置TCP的运行状况检查. 介绍 先决条件 被动TCP运行状况检查 服务器缓慢启动 活动TCP运行状况检查 微调TCP运行状况检查 "匹配&qu ...

  9. Nginx+Keepalived实现Web服务器负载均衡

    说明: 操作系统:CentOS 5.X 64位 Web服务器:192.168.21.127.192.168.21.128 站点:bbs.osyunwei.com和sns.osyunwei.com部署在 ...

最新文章

  1. FileDownloader 很棒的文件下载库
  2. python代码怎么运行-Python程序执行原理,python程序怎么运行的?
  3. 来自damon的zencart二次开发教程-2.2登录模块分析
  4. java配置接口提供给vue,vue在js中配置全局API接口
  5. SignalTap II逻辑分析仪的使用
  6. java实现矩阵相乘
  7. 计算机不能辨别汉字wifi,Win10系统连接不上被隐藏的中文Wifi的解决方法
  8. 5分钟 0元搭建个人独立博客网站(二)
  9. YMP框架学习笔记(二)------基于YMP框架搭建WEB应用程序
  10. 【Linux开发】Ubuntu下几个软件的配置记录backup
  11. 以太网的分层架构_以太网矩阵(Ethernet Fabric)简介
  12. 2016级算法第五次上机-C.Bamboo和Coco
  13. 未来计算机多媒体化,计算机多媒体技术的发展趋势研究
  14. w10连接远程计算机控制,win10系统教你如何远程控制他人电脑的方法
  15. 安装docker环境报错:Could not resolve host
  16. 服务器系统2003出入站,独立服务器win2003系统站点常见问题解答
  17. 几个吓尿了的公众号,前几个你不可能没听过
  18. html5 手机站点,HTML5移动端手机网站基本模板 HTML5基本结构
  19. 大疆aeb连拍_一张图带你轻松读懂摄影必备专业术语~
  20. ug曲面建模实例教程计算机,UG曲面造型实例-直接建模

热门文章

  1. 手把手教你用杰奇建小说站
  2. Memcache 中实现消息队列
  3. 三级菜单 ajax 已经测试成功
  4. Linux: 近100个常用命令大全
  5. JavaScript数据结构和算法简述——前言
  6. Moodle: 登记学生,检测学生是否存在在课程 Check if user is enrolled or enroll a user in course...
  7. spring基础Bean管理基于xml注入
  8. tcp retransmission原因
  9. 【python】随机采样的两种方法
  10. Git—代码管理、提交及冲突解决流程的思考