新闻| 文章| 资讯| 行情| 企业| wap手机版| article文章| 首页|会员中心|保存桌面|手机浏览
普通会员

肥城市书雪科技有限公司

企业列表
新闻列表
  • 暂无新闻
推荐企业新闻
联系方式
  • 联系人:王女士
首页 > 新闻中心 > ngnix 配置HTTP Proxy正向访问代理
新闻中心
ngnix 配置HTTP Proxy正向访问代理
发布时间:2024-11-07        浏览次数:0        返回列表

Ngnix本身可以做服务器以及反向代理的同时,同样支持正向代理。

ngnix  配置HTTP Proxy正向访问代理

说之前 吐槽一下OSChina的编辑器,图片大小,字体,颜色,各种问题,在我印象中没有好过,以后还能不能用啊

正向代理与反向代理的区别是,前者为企业防火墙以内的Client做代理进行访问防火墙外的服务器,后者恰好相反,反向代理为防火墙外的Client做代理访问防火墙内的服务器。

###一.关于HTTP代理 http proxy分为2种,第一种是透明代理,第二种是通过CONNECT建立隧道(Tunnel)的访问技术。

1.第一种代理 请求部分

Proxy-Connection: keep-alive来指示这种代理

然后转发请求头和请求体,请求头中如果要支持HTTP TRACE,无非需要加一个Via,或者为了服务器得到正式的ip,添加X-Real-ip。

注意:国内有些人称这种代理是GET代理,莫名其妙至极,本身这种代理支持HTTP现有的大多数MEDHOD(PUT,POST,GET,DELETE,OPTIONS...),称为“透明代理”再恰当不过了。

响应部分 因为这种代理是正常请求,因此不要通过TCP TLS通道便可以通信,因此他的响应头没啥和正常访问区别.

对于这种代理,我们用一张图来说明

2.第2种代理HTTP Tunnel隧道

对于HTTPS网站,大多数代理都是TCP隧道代理,当然透明代理也不例外,主要看Client能否正常接收SSL数据决定。

请求部分 注意:此处的请求没有请求体,无论是否是POST请求

然后代理服务器应该做的是,建立 普通的Socket 连接(注意,连接www.example.com:443),然后根据目标服务器的连接状态返回给Client,比如如果连接正常,着

否则关闭Client连接。

如果连接正常,Client收到HTTP/1.1 200 Connection established后,然后可以从Client读取TLS加密的数据。

接下来,把读取到的数据发送给支持SSLSocketServer(HTTPS)服务器。服务器收到数据后进行TLS握手,握手结束,把数据返回给代理。代理把数据转发给Client.

由此,代理活动结束。

我们再看一张图来展示整个代理过程 图可能太大,没显示出来,大家看这里( https://i-blog.csdnimg.cn/blog_migrate/8a205a247490ed76f5408aa93024ac81.png )

3.我们用WireShark+Fiddler进行模拟

( https://i-blog.csdnimg.cn/blog_migrate/650b3994aae06b062de53aec8fc35b18.png )

( https://i-blog.csdnimg.cn/blog_migrate/07427afa6d49b5e3ff5e83698933b486.png )

整个过程相当复杂,尤其是握手过程。

但大多数都是TLS层进行的,我们无需理会太多,只要做好Socket转发即可,就想本文第2张图一样。

目前我在写一款HTTP Proxy,遇到了握手问题,不知道如何是好,哈哈,待续吧,没准以后可以解决问题,到时候我写一篇博客发布出来。

###二、Nginx 正向代理配置

1,配置 DNS 解析 IP 地址以及超时时间(5秒)。

resolver 114.114.114.114;

resolver_timeout 5s;

2,配置正向代理参数,均是由 Nginx 变量组成。其中 proxy_set_header 部分的配置,是为了解决如果 URL 中带 "."(点)后 Nginx 503 错误。

proxy_pass $ scheme://$host$request_uri ;

proxy_set_header Host $http_host;

3,配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间。

proxy_buffers 256 4k;

proxy_max_temp_file_size 0;

proxy_connect_timeout 30;

4,配置代理服务器 Http 状态缓存时间。

proxy_cache_valid 200 302 10m;

proxy_cache_valid 301 1h;

proxy_cache_valid any 1m;

###三、支持SSL/TLS隧道代理

因为 Nginx 默认不支持HTTP CONNECT隧道代理,所以无法正向代理 Https 网站(网上银行,Gmail)。 如果访问 Https 网站,比如: https://www.google.com,Nginx access.log 日志如下

"ConNECT www.google.com:443 HTTP/1.1" 400

####关于HTTP代理测试,我们可以使用 Chrome的SwicthSharp扩展,指向代理服务器 ####关于HTTPD代理,如果我们不想使用代理客户端,直接修改DNS,让需要代理的网站域名地址指向代理服务器

参考博客: Windows DNS服务器

HTTP代理方式

VPS+Squid+stunnel实现安全代理隧道

HTTP GET/CONNECT代理区别