使用 Nginx 自己实现一个 Web 调试代理服务器

在Hecker News中我提到过,我记录了一种我使用NGINX(一个久经考验的产品,可以迅速地反向代理)作为一个本地测试代理服务器的方法。

我决定使用NGINX作为一个本地的调试代理服务器,是因为其它所有的测试代理服务器能够根据我的喜好来工作。它们都有一些很好的功能特征,但是它们没有一个有我希望得到的功能。很多成熟的代理,当我试着启动它们时,它们就不工作了。如果NGINX是你的代理服务器,那么你所需要的一切功能就都可能有了,而且它很容易设置。这篇博客将给出一个例子,告诉你通过最基本的设置,就使一切成为了可能。

在这篇帖子中,我们将搭建一个本地代理服务器,这个本地代理服务器将会打印由你的计算机产生的所有的HTTP request请求的一些基本信息到一个日志信息文件里。

安装 openresty

Openresty只是nginx拥有添加写的能力并且可以在它的内部运行常用的lua代码。我使用一台macbook电脑作为我日常的驱动,而且有了brew工具,在OS X系统上安装openresty很简单。

Openresty介绍链接地址: http://openresty.org/cn/

brew介绍链接地址: http://wenku.baidu.com/view/5fde7c78102de2bd9705887a.html

0?wx_fmt=png通过这行命令,就开始安装openresty和相关的配置文件了。你可以通过运行openresty命令来启动它,如果它在一个特殊的端口上启动,那么就需要sudo命令。使用该命令,你可以核实安装的程序和在你的PATH路径下的可执行程序。如果某个程序没有安装,该命令不会打印一个文件路径。0?wx_fmt=png

处理domain(域)

为了能使我们本地的openresty实例能够作为一个调试代理服务器使用,我们需要使所有的HTTP请求发送给openresty,并且配置openresty来接收和代理所有请求。

在代理服务器上指示请求

在一些linux和unix系统上,使用网络用户界面安装一个HTTP代理服务器很简单。OSX系统也不例外,在OSX的System Preference(系统偏好预设)里也可以完成一个HTTP代理服务器的配置。

0?wx_fmt=png

如果你没有这么奢侈,HTTP_PROXY环境变量或许也可以作为设置一个HTTP代理的标准方法。你可以在/etc/environment文件路径下设置它。

0?wx_fmt=png

配置openresty

配置nginx不需要太多的事,但是如果你不是太擅长nginx,配置它也许有点麻烦。在OSX操作系统上的openresty配置文件,在/usr/local/etc/openresty/nginx.conf文件路径下。

首先,我们应该想着去确保在openresty配置文件里默认的location指令应该像下面这样。

0?wx_fmt=png

resolver 8.8.8.8用来设置能被谷歌DNS服务器解析的域名。你是否想用一个不同的resolver,那就随便你了。

设置$origin_server”$scheme://$host”将会设置一个nginx变量,这个变量叫origin_server,它包括下行流量的HTTP请求scheme和host。

proxy_pass用来把请求代理到远程服务器,并且返回请求返回的结果。

打印request请求日志

现在,我们的代理服务器开始接收和代理流量,最后的步骤就是打印所有代理HTTP request请求日志了。在你的openresty配置文件的nginx服务器块添加如下一行命令:

0?wx_fmt=png在服务器块外面(http块的里面)添加如下一行命令:0?wx_fmt=png并且创建一个相应的文件。这个文件就是你HTTP request请求记录保存的地方。0?wx_fmt=png

这将告诉nginx打印日志的格式,在哪里打印,并且为打印日志创建文件。如果你想长时间保存这些日志信息,你将需要设置log rotate,并且选择一个不同的日志文件位置(tmp目录也许不太适合用来存储日志信息……)。

Log rotate介绍链接地址: http://blog.csdn.net/cjwid/article/details/1690101

它正常运行了!

如果你该设置的都设置好了,你访问的HTTP站点将会被打印到/tmp/proxy.access.log文件路径下。

通过保存在日志文件里的日志信息,你可以看到,curl和浏览器流量被拦截了:

0?wx_fmt=png

那接下来做什么呢?

如果你是一个nginx专家,你也许会注意到我们安装了openresty,但是没有用任何在nginx里不存在的功能。那是因为我们仍然还有很多事情要做。

最明显的事实是,openresty没有配置来支持代理HTTPS。

我将保留,然后在之后的博客中发布出来,但是为了通过HTTPS流量来使用这个代理,而且还没有经常发生的认证错误,我们需要做两件事情:

  • 创建我们自己的CA,并且在本地把它作为一个可信任的root。

  • 在SNI基础上,在我们的配置文件里动态添加代码,来为所有的域名认证签名。

CA介绍链接地址: http://baike.sogou.com/v6328142.htm?fromTitle=CA%E8%AE%A4%E8%AF%81

这听上去,好像有很多的事情要做,但是所有很难的工作已经被我们做完了。

Already been done for us的链接地址: https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/ssl.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值