dnf 免费ip代理服务器
NGINX主要设计作为反向代理服务器,但随着NGINX的发展,它同样能作为正向代理的选项之一。正向代理本身并不复杂,而如何代理加密的HTTPS流量是正向代理需要解决的主要问题。本文将介绍利用NGINX来正向代理HTTPS流量两种方案,及其使用场景和主要问题。
:在客户端需要在浏览器中或者系统环境变量手动设置代理的地址和端口。如squid,在客户端指定squid服务器IP和端口3128。
:客户端不需要做任何代理设置,“代理”这个角色对于客户端是透明的。如企业网络链路中的Web Gateway设备。
:也就是透传代理。代理服务器只是在TCP协议上透传HTTPS流量,对于其代理的流量的具体内容不解密不感知。客户端和其访问的目的服务器做直接TLS/SSL交互。本文中讨论的NGINX代理方式属于这种模式。
:代理服务器解密HTTPS流量,对客户端利用自签名证书完成TLS/SSL握手,对目的服务器端完成正常TLS交互。在客户端-代理-服务器的链路中建立两段TLS/SSL会话。如Charles,简单原理描述可以参考文章。
作为反向代理时,代理服务器通常终结 (terminate) HTTPS加密流量,再转发给后端实例。HTTPS流量的加解密和认证过程发生在客户端和反向代理服务器之间。
而作为正向代理在处理客户端发过来的流量时,HTTP加密封装在了TLS/SSL中,代理服务器无法看到客户端请求URL中想要访问的域名,如下图。所以代理HTTPS流量,相比于HTTP,需要做一些特殊处理。
根据前文中的分类方式,NGINX解决HTTPS代理的方式都属于透传(隧道)模式,即不解密不感知上层流量。具体的方式有如下7层和4层的两类解决方案。
早在1998年,也就是TLS还没有正式诞生的SSL时代,主导SSL协议的Netscape公司就提出了关于利用web代理来tunneling SSL流量的INTERNET-DRAFT。其核心思想就是利用HTTP CONNECT请求在客户端和代理之间建立一个HTTP CONNECT Tunnel,在CONNECT请求中需要指定客户端需要访问的目的主机和端口。Draft中的原图如下:
7层需要通过HTTP CONNECT来建立隧道,属于客户端有感知的普通代理方式,需要在客户端手动配置HTTP(S)代理服务器IP和端口。在客户端用curl 加-x参数访问如下:
既然是使用透传上层流量的方法,那可不可做成“4层代理”,对TCP/UDP以上的协议实现彻底的透传呢?答案是可以的。NGINX官方从1.9.0版本开始支持ngx_stream_core_module模块,模块默认不build,需要configure时加上--with-stream选项来开启。
用NGINX stream在TCP层面上代理HTTPS流量肯定会遇到本文一开始提到的那个问题:代理服务器无法获取客户端想要访问的目的域名。因为在TCP的层面获取的信息仅限于IP和端口层面,没有任何机会拿到域名信息。要拿到目的域名,必须要有拆上层报文获取域名信息的能力,所以NGINX stream的方式不是完全严格意义上的4层代理,还是要略微借助些上层能力。
要在不解密的情况下拿到HTTPS流量访问的域名,只有利用TLS/SSL握手的第一个Client Hello报文中的扩展地址SNI (Server Name Indication)来获取。NGINX官方从1.11.5版本开始支持利用ngx_stream_ssl_preread_module模块来获得这个能力,模块主要用于获取Client Hello报文中的SNI和ALPN信息。对于4层正向代理来说,从Client Hello报文中提取SNI的能力是至关重要的,否则NGINX stream的解决方案无法成立。同时这也带来了一个限制,要求所有客户端都需要在TLS/SSL握手中带上SNI字段,否则NGINX stream代理完全没办法知道客户端需要访问的目的域名。
NGINX stream与HTTP不同,需要在stream块中进行配置,但是指令参数与HTTP块都是类似的,主要配置部分如下:
对于4层正向代理,NGINX对上层流量基本上是透传,也不需要HTTP CONNECT来建立隧道。适合于透明代理的模式,比如将访问的域名利用DNS解定向到代理服务器。我们可以通过在客户端绑定/etc/hosts来模拟。
4层正向代理是透传上层HTTPS流量,不需要HTTP CONNECT来建立隧道,也就是说不需要客户端设置HTTP(S)代理。如果我们在客户端手动设置HTTP(s)代理是否能访问成功呢? 我们可以用curl -x来设置代理为这个正向服务器访问测试,看看结果:
可以看到客户端试图于正向NGINX前建立HTTP CONNECT tunnel,但是由于NGINX是透传,所以把CONNECT请求直接转发给了目的服务器。目的服务器不接受CONNECT方法,所以最终出现Proxy CONNECT aborted,导致访问不成功。
上文提到用NGINX stream做正向代理的关键因素之一是利用ngx_stream_ssl_preread_module提取出Client Hello中的SNI字段。如果客户端客户端不携带SNI字段,会造成代理服务器无法获知目的域名的情况,导致访问不成功。
在透明代理模式下(用手动绑定hosts的方式模拟),我们可以在客户端用openssl来模拟:
本文总结了NGINX利用HTTP CONNECT隧道和NGINX stream两种方式做HTTPS正向代理的原理,环境搭建,使用场景和主要问题,希望给大家在做各种场景的正向代理时提供参考。
本文将详细介绍Nginx如何实现正向代理和反向代理,以及这两种代理方式的应用场景。 **正向代理** 正向代理的主要作用是让内部网络中的设备(如服务器B)通过一个具有外部网络访问权限的设备(如服务器A)来访问...
然而,原生的Nginx并不支持HTTPS的正向代理dnf 免费ip代理服务器,即不能直接将客户端的HTTPS请求转发到目标服务器。这在某些网络架构或者安全需求的场景下会带来不便。为了解决这个问题,开发者们开发了第三方模块——如`ngx_...
作为正向代理,Squid 可以接收客户端的HTTP和HTTPS请求,然后将这些请求转发到实际的API服务器。配置 Squid 正向代理通常涉及以下几个步骤: 1. 安装 Squid:在大多数Linux发行版中,可以通过包管理器(如 apt-get ...
附件为已在linux服务器上安装验证成功的源码安装包,成功实现了正向https代理、反向代理和图片代理功能。
同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。 Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接 高度...
在测试中,使用 SFTP 客户端连接到 Nginx 代理服务器,Nginx 将连接请求转发到 SFTP 服务器。通过 SFTP 客户端可以访问 SFTP 服务器上的文件和目录。 例如,在本文档中,使用 SFTP 客户端连接到 10.0.85.137:22 ...
正向代理 、反向代理 、Nginx的启动特别简单,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。还能够不间断服务的情况下进行软件版本的升级。 Nginx在做反向代理时,能够提供性能稳定并且灵活...
2. **反向代理服务器**:Nginx能够作为反向代理服务器,将客户端的请求转发到后端的多个服务器上,从而实现负载均衡。 3. **静态内容服务**:Nginx非常适合于提供静态内容,如图片、视频和HTML页面。 4. **SSL/TLS...
当客户端需要访问某个服务器时,它首先会将请求发送给正向代理服务器,再由代理服务器转发给目标服务器,最后将响应返回给客户端。 **示例:** 假设我们需要访问国外的网站,但由于地理位置或政策原因无法直接访问...
4. 正向代理:虽然不常用,但Nginx也可以作为正向代理,帮助内部网络的客户端访问外部网络资源。 配置Nginx实现反向代理,可以在nginx.conf配置文件中添加相应的server块,例如将所有80端口的请求转发到15672端口。...
我一般都是使用 nginx 做反向代理 tomcat 和其他应用的,其实 nginx 也是支持正向代理的 所谓正向代理就是内网用户通过网关访问外部资源,就是电脑上网时浏览器设置下 http 代理地址访问互联网 而反向代理就是外部...
搭建Nginx正向代理服务是一项常见的网络配置任务,它允许内部网络的服务器或设备通过代理访问外部网络资源。在本文中,我们将详细介绍如何在Linux系统上安装和配置Nginx以实现正向代理功能。 首先,Nginx本身并不...
基于nginx1.17.4构建的一个支持Https正向代理的docker镜像 可以方便的做内网访问外网的代理服务,稳定运行,添加了支持Https的插件,可以代理Https,资源中附了使用说明,镜像使用很简单几乎开箱即用