最近由于项目需要学习了安全代理的相关知识,其实刚开始的时候是非常需要一个入门的介绍,大概说明下这个到底是个什么东西,能干啥,简单的原理是什么,为此我记录下我看完用完的心得,记录成笔记。
一般我们代码开发完成后需要和Nginx进行联合部署,Nginx作为网页访问的窗口,也是访问代理的作用,因为我们需要在代理里面做一些定制化的开发,所以我们选择使用开源软件工具openresty。openresty看过之后就明白了,它其实就是Nginx,本质上也是代理,而且是在Nginx的基础上开发而来的。那它和Nginx有什么区别呢,最大的区别就是它可以做很多定制化的开发,比如说,修改请求的header信息,添加一些访问参数,修改请求的body内容等等,说白了就是Nginx能干的事它都能干,openresty能干的事Nginx干起来很麻烦,对于开发者来说不友好。在现在很多的web代理服务很多都是用的openresty来做代理。
openresty做开发的时候需要使用lua语言来进行开发,lua是脚本语言,可以使用很简单的几句话实现想要的功能。openresty这个软件基于Nginx开发而来,她把代理服务的过程拆成了很多部分,每个部分,我们可以在里面去进行二次开发,以达到我们想要的目的,最经典的是下面这张图,这张图在很多网上资料都会有,它是openresty的基本框架,如下图所示:
第一次看到这个图的时候其实是比较陌生的,完全不明白这个图到底讲的是啥。后面是开发完了才渐渐明白,这里我先大概总结下,这个图可以理解成Nginx工作的所有流程,上面大致分为了四栏,工作流程是从上到下,第一栏的两个流程init,这两个流程是openresty起来的时候最先执行的两个流程,你可以在这个两个流程里面去实现一些功能,比如说,参数配置或者环境变量配置等,因为init这个流程只会执行一次;然后是后面的第二、三、四栏流程,这个三个流程是代理的每一个请求都会经历的流程,意思是假如代理的一个GET或者POST请求到openresty,都会经历后面的三个流程,那么你就可以在这后面的几个流程里面添加所需的功能。
我这个笔记不记录openresty的安装过程,网上教程太多,可以自己另外寻找,各个服务平台安装时还有一些细微的区别,我是在centos7.X上面搭建的openresty开发环境。我说下我开发遇到印象比较深的几个问题:
- lua代码里面两个字符串的组合不是像其他语言那样直接用+,而是直接用两个英文的句号..
- 可以在代码里面添加打印ngx.log(ngx.ERR, "打印字符串数据",message),里面的ngx.ERR是日志类型,还可以用ngx.INFO等其他日志类型,打印信息在/usr/local/openresty/nginx/logs路径下面进行查看
- 使用下面命令启动关闭openresty
#启动openresty,启动后可以在浏览器输入地址看到代理返回的消息
sudo /usr/local/openresty/bin/openresty -p /usr/local/openresty/nginx/
#执行下面命令停止openresty服务
sudo /usr/local/openresty/bin/openresty -s stop
下面是我开发过程中用到的几个服务功能
- 动态更新https的证书和秘钥:动态更新SSL证书
- 添加黑名单进行拦截黑名单的访问IP:黑白名单的拦截操作
- 代理里面验证jwt的token:lua代码实现jwt的token认证
- 代理里面使用http请求访问其他服务:lua实现http请求例子