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

本文介绍了如何加密NGINX与上游组或代理服务器之间的HTTP通信。

先决条件

  • NGINX开源或NGINX Plus
  • 甲代理服务器或服务器的上游组
  • SSL证书和私钥

获取SSL服务器证书

您可以从受信任的证书颁发机构(CA)购买服务器证书,也可以使用OpenSSL库创建自己的内部CA 并生成自己的证书。服务器证书以及私钥应放在每个上游服务器上。

获取SSL客户端证书

NGINX将使用SSL客户端证书向上游服务器标识自己。此客户端证书必须由受信任的CA签名,并在NGINX上与相应的私钥一起配置。

您还需要配置上游服务器,以要求所有传入的SSL连接都需要客户端证书,并信任颁发NGINX客户端证书的CA。然后,当NGINX连接到上游时,它将提供其客户端证书,而上游服务器将接受它。

配置NGINX

首先,将URL更改为上游组以支持SSL连接。在NGINX配置文件中,httpsproxy_pass伪指令中的代理服务器或上游组指定“ ”协议:

location /upstream {proxy_pass https://backend.example.com;
}

使用proxy_ssl_certificateproxy_ssl_certificate_key指令添加客户端证书和将用于在每个上游服务器上对NGINX进行身份验证的密钥:

location /upstream {proxy_pass                https://backend.example.com;proxy_ssl_certificate     /etc/nginx/client.pem;proxy_ssl_certificate_key /etc/nginx/client.key;
}

如果您对上游或您自己的CA使用自签名证书,请同时添加proxy_ssl_trusted_certificate。该文件必须为PEM格式。(可选)包括proxy_ssl_verifyproxy_ssl_verfiy_depth指令,以使NGINX检查安全证书的有效性:

location /upstream {#...proxy_ssl_trusted_certificate /etc/nginx/trusted_ca_cert.crt;proxy_ssl_verify       on;proxy_ssl_verify_depth 2;#...
}

每个新的SSL连接都需要在客户端和服务器之间进行完整的SSL握手,这会占用大量CPU。要让NGINX代理先前协商过连接参数并使用所谓的缩写握手,请包含以下proxy_ssl_session_reuse指令:

location /upstream {#...proxy_ssl_session_reuse on;#...
}

(可选)您可以指定使用哪些SSL协议和密码:

location /upstream {#...proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;proxy_ssl_ciphers   HIGH:!aNULL:!MD5;
}

配置上游服务器

每个上游服务器应配置为接受HTTPS连接。对于每个上游服务器,使用ssl_certificatessl_certificate_key指令指定服务器证书和私钥的路径:

server {listen              443 ssl;server_name         backend1.example.com;ssl_certificate     /etc/ssl/certs/server.crt;ssl_certificate_key /etc/ssl/certs/server.key;#...location /yourapp {proxy_pass http://url_to_app.com;#...}
}

使用ssl_client_certificate伪指令指定客户端证书的路径:

server {#...ssl_client_certificate /etc/ssl/certs/ca.crt;ssl_verify_client      optional;#...
}

完整的例子

http {#...upstream backend.example.com {server backend1.example.com:443;server backend2.example.com:443;}server {listen      80;server_name www.example.com;#...location /upstream {proxy_pass                    https://backend.example.com;proxy_ssl_certificate         /etc/nginx/client.pem;proxy_ssl_certificate_key     /etc/nginx/client.key;proxy_ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;proxy_ssl_ciphers             HIGH:!aNULL:!MD5;proxy_ssl_trusted_certificate /etc/nginx/trusted_ca_cert.crt;proxy_ssl_verify        on;proxy_ssl_verify_depth  2;proxy_ssl_session_reuse on;}}server {listen      443 ssl;server_name backend1.example.com;ssl_certificate        /etc/ssl/certs/server.crt;ssl_certificate_key    /etc/ssl/certs/server.key;ssl_client_certificate /etc/ssl/certs/ca.crt;ssl_verify_client      optional;location /yourapp {proxy_pass http://url_to_app.com;#...}server {listen      443 ssl;server_name backend2.example.com;ssl_certificate        /etc/ssl/certs/server.crt;ssl_certificate_key    /etc/ssl/certs/server.key;ssl_client_certificate /etc/ssl/certs/ca.crt;ssl_verify_client      optional;location /yourapp {proxy_pass http://url_to_app.com;#...}}
}

在此示例中,伪指令中的“ https”协议proxy_pass指定由NGINX转发到上游服务器的流量得到保护。

当安全连接第一次从NGINX传递到上游服务器时,将执行完整的握手过程。该proxy_ssl_certificate伪指令定义上游服务器所需的PEM格式证书proxy_ssl_certificate_key的位置,该伪指令定义证书的私钥的位置,并且proxy_ssl_protocolsproxy_ssl_ciphers伪指令控制使用哪些协议和密码。

下次NGINX将连接传递到上游服务器时,由于该proxy_ssl_session_reuse指令,会话参数将被重用,并且安全连接的建立速度更快。

proxy_ssl_trusted_certificate指令命名的文件中的受信任CA证书用于在上游验证证书。该proxy_ssl_verify_depth伪指令指定检查证书链中的两个证书,并且该proxy_ssl_verify伪指令验证证书的有效性。

Nginx使用HTTPS建立与上游服务器的网络通信相关推荐

  1. nginx 配置HTTPS证书-阿里云服务器

    一.申请免费SSL证书: 1.登录阿里云: 2.进入管理控制台--云盾控制台--证书服务: 二.免费购买Symantec证书: 1.接上一步,找到证书服务之后,点击进入证书服务页面,然后"购 ...

  2. Nginx:12---反向代理之(代理模块,代理单个上游服务器)

    一.反向代理介绍 反向代理应该是 Nginx 做的最多的一件事了,什么是反向代理呢,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网 ...

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

    Nginx设置TCP上游服务器的SSL配置 本文介绍了如何为NGINX Plus和接受TCP连接的负载均衡的服务器组设置SSL 什么是SSL终端 SSL终端意味着NGINX Plus充当与客户端连接的 ...

  4. TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性...

    起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于 ...

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

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

  6. nginx依靠超时时间实现上游负载web服务器重启时不影响访问

    nginx依靠超时时间实现上游负载web服务器重启时不影响访问 本文未配置主从机集群,主从多台集群. nginx.conf(或者外联配置文件)中,位于http{}之内,样例如下: - upstream ...

  7. 上游服务器响应无效怎么办,Nginx 当上游服务器返回失败时的处理办法

    95 Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 |ht ...

  8. Nginx配置与上游服务器的长链接

    可以通过keep-alive指令配置长链接数量 upstream backend{server 192.168.61.1:9080 weight=1;server 192.168.61.1:9090 ...

  9. Nginx网络配置当中的备份上游服务器以及不可用上游服务器

    备份上游服务器 upstream backend{server 192.168.61.1:9080 weight=1;server 192.168.61.1:9090 weight=2 backup; ...

最新文章

  1. 用Python构建网页抓取器
  2. #if DEBUG与条件(“ DEBUG”)
  3. js面向对象小结(工厂模式,构造函数,原型方法,继承)
  4. ASP.NET服务器控件数据绑定总结
  5. System.getProperty()的用途
  6. ef 数据迁移mysql_07116.3.0如何将CM的外部PostgreSQL数据库迁移至MySQL服务
  7. LeetCode-C#实现-链表(#19/21/141/206/707/876)
  8. PS 基础教程,调整图像品质「1」如何调整亮度和对比度?
  9. vs不能调试_20200717调试记录(五十四)
  10. iOS Podfile修改优化
  11. Java实现MD5加盐加密算法
  12. 38译码器数码管c语言代码,通过38译码器控制数码管显示数字
  13. html动画3d背景图片,jQuery和CSS3全屏3D背景图片视觉差特效
  14. 256K,320K及以上Nero AAC,QAAC,FAAC,MP3,OGG等主流有损音频格式横评
  15. linux开机启动界面异常,Linux 界面不能启动的解决
  16. 贴纸UI效果如何制作,4个做贴纸效果的小技巧
  17. 简单密码(Caesar密码)--C++实现
  18. 1.ME32F103单片机ADC和DMA
  19. 使用Fiddler实现网络限速,模拟低速网络
  20. 匠心铸梦 敏涵控股集团打造民族领军品牌

热门文章

  1. WordPress程序备受喜爱的原因:十八般武艺
  2. 学习和使用web标准的十大理由
  3. DotFuscator使用步骤
  4. Bootstrap 3: accordion menu 手风琴效果
  5. bbPress 介绍,安装和中文包
  6. JavaScript 图片的上传前预览
  7. linux ntp时间服务器配置
  8. SequentialSearch 顺序表查找
  9. 【英文写作日知录 第2期】句式汇总 Sun, 04 July 2021
  10. 【今日CS 视觉论文速览】Mon, 7 Jan 2019