加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

使用Nginx作为HTTPS正向代理服务器

发布时间:2019-07-10 15:17:31 所属栏目:业界 来源:今日头条
导读:NGINX首要计划作为反向署理处事器,但跟着NGINX的成长,它同样能作为正向署理的选项之一。正向署理自己并不伟大,而怎样署理加密的HTTPS流量是正向署理必要办理的首要题目。本文将先容操作NGINX来正向署理HTTPS流量两种方案,及其行使场景和首要题目。 HTT
副问题[/!--empirenews.page--]

NGINX首要计划作为反向署理处事器,但跟着NGINX的成长,它同样能作为正向署理的选项之一。正向署理自己并不伟大,而怎样署理加密的HTTPS流量是正向署理必要办理的首要题目。本文将先容操作NGINX来正向署理HTTPS流量两种方案,及其行使场景和首要题目。

HTTP/HTTPS正向署理的分类

简朴先容下正向署理的分类作为领略下文的配景常识:

按客户端有无感知的分类

  • 平凡署理:在客户端必要在赏识器中可能体系情形变量手动配置署理的地点和端口。如squid,在客户端指定squid处事器IP和端口3128。
  • 透明署理:客户端不必要做任何署理配置,“署理”这个脚色对付客户端是透明的。如企业收集链路中的Web Gateway装备。

按署理是否解密HTTPS的分类

  • 地道署理 :也就是透传署理。署理处事器只是在TCP协议上透传HTTPS流量,对付其署理的流量的详细内容不解密不感知。客户端和其会见的目标处事器做直接TLS/SSL交互。本文中接头的NGINX署理方法属于这种模式。
  • 中间人(MITM, Man-in-the-Middle)署理:署理处事器解密HTTPS流量,对客户端操作自署名证书完成TLS/SSL握手,对目标处事器端完成正常TLS交互。在客户端-署理-处事器的链路中成立两段TLS/SSL会话。如Charles,简朴道理描写可以参考文章。

https://www.jianshu.com/p/405f9d76f8c4

  • 注:这种环境客户端在TLS握手阶段现实上是拿到的署理处事器本身的自署名证书,证书链的验证默认不乐成,必要在客户端信赖署理自签证书的Root CA证书。以是进程中是客户端有感的。假如要做成无感的透明署理,必要向客户端推送自建的Root CA证书,在企业内部情形下是可实现的。

行使Nginx作为HTTPS正向署理处事器

为什么正向署理处理赏罚HTTPS流量必要非凡处理赏罚?

作为反向署理时,署理处事器凡是终结 (terminate) HTTPS加密流量,再转发给后端实例。HTTPS流量的加解密和认证进程产生在客户端和反向署理处事器之间。

而作为正向署理在处理赏罚客户端发过来的流量时,HTTP加密封装在了TLS/SSL中,署理处事器无法看到客户端哀求URL中想要会见的域名,如下图。以是署理HTTPS流量,对比于HTTP,必要做一些非凡处理赏罚。

行使NGINX作为HTTPS正向署理处事器

NGINX的办理方案

按照前文中的分类方法,NGINX办理HTTPS署理的方法都属于透传(地道)模式,即不解密不感知上层流量。详细的方法有如下7层和4层的两类办理方案。

HTTP CONNECT地道 (7层办理方案)

汗青配景

早在1998年,也就是TLS还没有正式降生的SSL期间,主导SSL协议的Netscape公司就提出了关于操作web署理来tunneling SSL流量的INTERNET-DRAFT。其焦点头脑就是操作HTTP CONNECT哀求在客户端和署理之间成立一个HTTP CONNECT Tunnel,在CONNECT哀求中必要指定客户端必要会见的目标主机和端口。Draft中的原图如下:

行使NGINX作为HTTPS正向署理处事器

整个进程可以参考HTTP势力巨子指南中的图:

  1. 客户端给署理处事器发送HTTP CONNECT哀求。
  2. 署理处事器操作HTTP CONNECT哀求中的主机和端口与目标处事器成立TCP毗连。
  3. 署理处事器给客户端返回HTTP 200相应。
  4. 客户端和署理处事器成立起HTTP CONNECT地道,HTTPS流量达到署理处事器后,直接通过TCP透传给远端目标处事器。署理处事器的脚色是透传HTTPS流量,并不必要解密HTTPS。

行使NGINX作为HTTPS正向署理处事器

NGINX ngx_http_proxy_connect_module模块

NGINX作为反向署理处事器,官方一向没有支持HTTP CONNECT要领。可是基于NGINX的模块化、可扩展性好的特征,阿里的@chobits提供了ngx_http_proxy_connect_module模块,来支持HTTP CONNECT要领,从而让NGINX可以扩展为正向署理。

情形搭建

以CentOS 7的情形为例。

1) 安装

对付新安装的情形,参考正常的安装步协调安装这个模块的步调(https://github.com/chobits/ngx_http_proxy_connect_module),把对应版本的patch打上之后,在configure的时辰加上参数--add-module=/path/to/ngx_http_proxy_connect_module,示譬喻下:

  1. ./configure  
  2. --user=www  
  3. --group=www  
  4. --prefix=/usr/local/nginx  
  5. --with-http_ssl_module  
  6. --with-http_stub_status_module  
  7. --with-http_realip_module  
  8. --with-threads  
  9. --add-module=/root/src/ngx_http_proxy_connect_module 

对付已经安装编译安装完的情形,必要插手以上模块,步调如下:

  1. # 遏制NGINX处事 
  2. # systemctl stop nginx 
  3. # 备份原执行文件 
  4. # cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak 
  5. # 在源代码路径从头编译 
  6. # cd /usr/local/src/nginx-1.16.0 
  7. ./configure  
  8. --user=www  
  9. --group=www  
  10. --prefix=/usr/local/nginx  
  11. --with-http_ssl_module  
  12. --with-http_stub_status_module  
  13. --with-http_realip_module  
  14. --with-threads  
  15. --add-module=/root/src/ngx_http_proxy_connect_module 
  16. # make 
  17. # 不要make install 
  18. # 将新天生的可执行文件拷贝包围原本的nginx执行文件 
  19. # cp objs/nginx /usr/local/nginx/sbin/nginx 
  20. # /usr/bin/nginx -V 
  21. nginx version: nginx/1.16.0 
  22. built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
  23. built with OpenSSL 1.0.2k-fips 26 Jan 2017 
  24. TLS SNI support enabled 
  25. configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-threads --add-module=/root/src/ngx_http_proxy_connect_module 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读