前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Nginx 自己实现一个 Web 调试代理服务器

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

作者头像
哲洛不闹
发布2018-09-18 10:48:37
1.3K0
发布2018-09-18 10:48:37
举报
文章被收录于专栏:java一日一条java一日一条

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java一日一条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 openresty
  • 处理domain(域)
    • 在代理服务器上指示请求
    • 配置openresty
    • 打印request请求日志
    • 那接下来做什么呢?
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档