openresty

nginx + lua 构建网站防护waf(一)

故事扮演 提交于 2020-01-14 03:10:19
最近在帮朋友维护一个站点。这个站点是一个Php网站。坑爹的是用IIS做代理。出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC。最后找到了waf这样一个解决方案缓解一下。话不多说直接开始。 waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击 防止svn/备份之类文件泄漏 防止ApacheBench之类压力测试工具的攻击 屏蔽常见的扫描黑客工具,扫描器 屏蔽异常的网络请求 屏蔽图片附件类目录php执行权限 防止webshell上传 nginx 的话我选择春哥开源的:OpenResty一个伟大的项目。 好了步骤开始: 1、安装Luagit: # wget http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz # tar -xvf LuaJIT-2.1.0-beta1.tar.gz # cd LuaJIT-2.1.0-beta1 # make # make install #ln -sf luajit-2.1.0-beta1 /usr/local/bin/luajit 2、安装openresty: ./configure --prefix=/opt/openresty --with-luajit --without-http_redis2_module -

使用OpenResty(一)

无人久伴 提交于 2020-01-10 12:07:41
1.安装 在 官网 根据自己的系统版本下载对应的安装包,我使用是windows,点击下图链接下载解压进行了 2.使用 cmd到所在的目录中,输入 nginx.exe 启动,然后在浏览器访问localhost,出现“ Welcome to OpenResty”则成功 3.nginx嵌入lua 在Nginx的配置文件/conf/nginx.conf中使用content_by_lua或content_by_lua_file指令 content_by_lua使用简单的脚本 打开nginx.conf,找到sever下localhost中配置 default_type text/html; content_by_lua_block { ngx.say("<p>hello, world</p>") } 保存之后,使用nginx -s reload 重启nginx,刷新之后,下图所示 content_by_lua_file引入lua文件 引入文件路径使用绝对路径或者相对路径从openresty-1.15.8.2-win64目录开始 4.常用命令 查看nginx版本号: nginx -V 启动nginx: start nginx 快速关闭nginx: nginx -s stop 正常关闭nginx: nginx -s quit 重启nginx: nginx -s reload 5.注意

How to avoid circular dependency in lua without global variables?

夙愿已清 提交于 2020-01-04 14:11:39
问题 I'm using OpenResty and my app is setup as: app/ clients/ photoClient.lua init.lua auth.lua Let's say photoClient has both an unauthenticated and a authenticated endpoint (similar to an avatar endpoint that is accessible without logging in, but there may be private photos that you need to login first) So in terms of dependencies, I have: -- auth.lua local photoClient = require('app.clients.photoClient') -- this is used to show avatar on the login page local auth = {} auth.isAuthenticated =

使用Nginx+Lua实现waf

人走茶凉 提交于 2019-12-30 09:21:00
使用Nginx+Lua实现waf 软件包需求: 1 、Nginx兼容性【最后测试到1.13.6】 wget http://nginx.org/download/nginx-1.13.6.tar.gz 2 、PCRE为Nginx编译安装关系的依赖 wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz 3 、下载luajit解释器和ngx_devel_kit以及lua-nginx-module模块 wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz 4 、文件解压: tar xf nginx-1.13.6.tar.gz pcre-8.42.tar.gz LuaJIT-2.0.5.tar.gz v0.3.0.tar.gz v0.10.13.tar.gz 5 、安装LuaJIT Luajit是Lua即时编译器 cd LuaJIT-2.0.5/make

用Nginx+Lua(OpenResty)开发高性能Web应用

主宰稳场 提交于 2019-12-30 08:40:01
在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高;如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀;目前Nginx团队也开始意识到这个问题,开发了nginxScript:可以在Nginx中使用JavaScript进行动态配置一些变量和动态脚本执行;而目前市面上用的非常成熟的扩展是由章亦春将Lua和Nginx粘合的ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为OpenResty,这样开发人员就可以安装OpenResty,使用Lua编写脚本,然后部署到Nginx Web容器中运行。从而非常轻松就能开发出高性能的Web服务。 接下来我们就认识下Nginx、Lua、ngx_lua模块和ngx_lua到底能开发哪些类型的web应用。 一、ngx_lua简介 1 、Nginx 优点 Nginx设计为一个主进程多个工作进程的工作模式,每个进程是单线程来处理多个连接,而且每个工作进程采用了非阻塞I/O来处理多个连接,从而减少了线程上下文切换,从而实现了公认的高性能、高并发

Fedora安装openresty

为君一笑 提交于 2019-12-30 08:38:20
安装参考 openresty.org 安装依赖库yum install readline-devel pcre-devel openssl-devel 解压 tar xzvf ngx_openresty-VERSION.tar.gz 配置 ./configure --prefix=/opt/openresty --with-libdrizzle=/usr/local --with-http_drizzle_module --with-luajit --with-http_iconv_module -j2 --with-http_postgres_module 然后就是make和make install 升级openresty 下载最新的openresty包 tar\configure\make\make install.在安装前需要将运行的nginx进程kill 将nginx的路径加入到环境变量中 PATH=/usr/local/openresty/nginx/sbin:$PATH export PATH 这个好像是在当前登录会话中起作用,退出就失效了,好像有个办法能让一直在环境变量中,再试 开机自动运行nginx 好像是在/etc/rc.d/rc.local中加入nginx启动的脚本就行了,回头试下 至于nginx的安装路径,配置文件路径,日志路径等,都是在.

openresty

会有一股神秘感。 提交于 2019-12-30 08:38:07
drizzle 下载 http://openresty.org/download/drizzle7-2011.07.21.tar.gz tar xzvf drizzle7-2011.07.21.tar.gz cd drizzle7-2011.07.21/ ./configure --without-server make libdrizzle-1.0 make install-libdrizzle-1.0 openresty 下载 https://openresty.org/download/openresty-1.13.6.2.tar.gz ./configure --with-cc-opt="-I/usr/local/opt/openssl/include/ -I/usr/local/opt/pcre/include/" --with-ld-opt="-L/usr/local/opt/openssl/lib/ -L/usr/local/opt/pcre/lib/" --with- http_drizzle_module --with-http_iconv_module --with-http_postgres_module make make install 来源: https://www.cnblogs.com/hiraeth/p/10693162.html

使用Nginx+Openresty实现WAF功能

蹲街弑〆低调 提交于 2019-12-27 15:42:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 什么是WAF Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 实现WAF 两种方式 使用nginx+lua来实现WAF,须在编译nginx的时候配置上lua 部署OpenResty,不需要在编译nginx的时候指定lua 功能列表 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。 支持URL白名单,将不需要过滤的URL进行定义。 支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。 支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。 支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。 支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。 支持URL参数过滤,原理同上。 支持日志记录,将所有拒绝的操作,记录到日志中去。 日志记录为JSON格式,便于日志分析,例如使用ELKStack进行攻击日志收集、存储、搜索和展示 具体操作 采用第二种方式实现WAF较为方便 以下操作的前提是:Centos

OpenResty 在马蜂窝广告监测中的应用

人走茶凉 提交于 2019-12-27 10:42:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 马蜂窝技术原创内容,更多干货请订阅公众号:mfwtech 广告是互联网变现的重要手段之一。 以马蜂窝旅游 App 为例,当用户打开我们的应用时,有可能会在首屏或是信息流、商品列表中看到推送的广告。如果刚好对广告内容感兴趣,用户就可能会点击广告了解更多信息,进而完成这条广告希望完成的后续操作,如下载广告推荐的 App 等。 广告监测平台的任务就是持续、准确地收集用户在浏览和点击广告这些事件中携带的信息,包括来源、时间、设备、位置信息等,并进行处理和分析,来为广告主提供付费结算以及评估广告投放效果的依据。 因此,一个可靠、准确的监测服务非常重要。为了更好地保障平台和广告主双方的权益,以及为提升马蜂窝旅游网的广告服务效果提供支撑,我们也在不断地探索适合的解决方案,加强广告监测服务的能力。 Part.1 初期形态 初期我们的广告监测并没有形成完整的服务对外开放,因此实现方式及提供的能力也比较简单,主要分为两部分:一是基于客户端打点,针对事件进行上报;另一部分是针对曝光、点击链接做转码存档,当请求到来后解析跳转。 但是很快,这种方式的弊端就暴露出来,主要体现在以下几个方面: 收数的准确性 :数据转发需要访问中间件才能完成,增加了多段丢包的机率。在和第三方监测服务进行对比验证时,Gap 差异较大; 数据的处理能力

6、openresty:nginx平滑升级

一笑奈何 提交于 2019-12-27 00:38:24
把服务器从低版本升级为高版本,强行停止服务器,会影响正在运行的进程。 平滑升级不会停掉正在进行中的进程,这些进程会继续处理请求 。但不会再接受新请求,这些老的进程在处理完请求之后 会停止。此平滑升级过程中,新开的进程会被处理。 一、平滑升级 进入nginx可执行程序的目录 # cd /usr/local/nginx/sbin/ # ./nginx -V #查看nginx版本 1、下载高版本nginx http://nginx.org/download/nginx-1.13.1.tar.gz 执行指令 # ./configure # make #不能执行 make install # cd objs 此目录下 有高版本的nginx 备份低版本的nginx cp nginx nginx.old 执行强制覆盖 cp -rfp objs/nginx /usr/local/nginx/sbin 测试一下新复制过来文件生效情况: # /usr/local/nginx/sbin/nginx -t # ps -ef | grep nginx 2、执行信号平滑升级 # kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` 更新配置文件 给nginx发送USR2信号后,nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin