使用 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

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

处理domain(域)

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

在代理服务器上指示请求

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

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

配置openresty

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

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

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

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

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

打印request请求日志

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

在服务器块外面(http块的里面)添加如下一行命令:

并且创建一个相应的文件。这个文件就是你HTTP request请求记录保存的地方。

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

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

它正常运行了!

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

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

那接下来做什么呢?

如果你是一个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

原文发布于微信公众号 - java一日一条(mjx_java)

原文发表时间:2016-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏岑玉海

批量设置ssh无密码登陆脚本

最近要给集群设置ssh无密码登陆,如果需要手动设置这个无密码登陆,所以在网上找了几个脚本,亲测下面这个好使,并且设置比较简单。 需要用root账户执行,我也是要...

5375
来自专栏磨磨谈

cephonebox发布(ceph+calamari集成iso)

现在已经是2016年收官的一个月了,之前一直想做一个calamari的集成版本,之所以有这个想法,是因为,即使在已经打好包的情况下,因为各种软件版本的原因,造成...

914
来自专栏拂晓风起

Firefox 扩展开发 扩展学习 工具

1288
来自专栏技术博客

windows Server 2008 R2 IE增强安全配置正在阻止来自下列网站的内容

 当在Windows Sever 2008 R2中运动IE8的时候会发现默认情况下IE启用了增强的安全配置,为了方便而且是在内网的情况下我们可以关闭IE8的增强...

1.4K2
来自专栏有困难要上,没有困难创造困难也要上!

Linux上PostgreSQL绿色版安装

3032
来自专栏信安之路

一步一步带你体验 openvas

openvas 是 nessus 项目的一个开源分支,用于对目标系统进行漏洞评估和管理,openvas 的配置使用相较于 nessus 更加复杂,扫描速度也不如...

1580
来自专栏Java成神之路

Idea_学习_09_Idea 方法自动生成参数默认名

生成方法后,还空着参数,可以使用 ctrl + alt + 空格 ,列出参数,然后选择参数即可。

1234
来自专栏bboysoul

什么是EOF

EOF的意思是End Of File是文件尾的标志。在数值上来说就是-1。 当在文件操作的时候,碰到文件结束,或者数据读取错误是均会返回EOF。 在linu...

1032
来自专栏好好学习吧

testng执行多个suite

由于testng.xml中只能设置一个<suite>标签,就无法创建多个测试集,通过<suite-files >标签可以实现允许多个测试集。

4441
来自专栏遊俠扎彪

inux (CentOS 5.6) 安装 Sun JDK (切换自带OpenJDK)

可根据需要卸载不需要的JDK Version

2008

扫码关注云+社区

领取腾讯云代金券