基于名字的虚拟主机Nginx首先选定由哪一个虚拟主机来处理请求。让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始:server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name e
转载 3月前
128阅读
引言 最近在参与一个项目过程中遇到一个问题,相信大部分人都遇到过:application/json格式传递数据时,因为后台是go强类型语言,在定义api接口时,某些字段要求是整型类型,但是对于前端来说输入框或者从url中的search取到的参数都是字符串,不得不进行前端类型转换。multipart/form-data。通过该格式后端取到前端传递的数据就是数字了(即使前端传递的是字符串),而不像j
前面介绍的限流方案有一个缺陷就是:它不是全局的,不是分布式的,无法很好的应对分布式场景下的大流量冲击。那么,接下来,我们就介绍下如何实现亿级流量下的分布式限流。分布式限流的关键就是需要将限流服务做成全局的,统一的。可以采用Redis+Lua技术实现,通过这种技术可以实现高并发和高性能的限流。Lua是一种轻量小巧的脚本编程语言,用标准的C语言编写的开源脚本,其设计的目的是为了嵌入到应用程序中,为应用
转载 3月前
50阅读
分布式限流方案(gateway限流,redis+lua实现限流,nginx限流)目录收起限流算法计数器:漏桶算法:令牌桶算法:限流具体实现网关限流:redis+luaNginx限流计数器算法滑动窗口算法写在最后的话如果一段时间内请求的数量过大,就会给服务器造成很大压力,可能导致服务器无法提供其它服务。限流算法计数器:计数器比较简单粗暴,比如我们要限制1s能够通过的请求数,实现的思路就是从第一个请求
lua-nginx-module 模块在openresty中,lua-nginx-module 是一个基础的模块,这个模块中暴露出去了很多的API可以供我们来使用。但是 lua-nginx-module 这个模块存在一个问题:模块中调用C函数的API都是使用Lua C API来完成。对于那些能够被 Lua 调用的 C 函数来说,它的接口必须遵循 Lua 要求的形式:typedef int (*lu
 nginx参数:–prefix= 指向安装目录–sbin-path 指向(执行)程序文件(nginx)–conf-path= 指向配置文件(nginx.conf)–error-log-path= 指向错误日志目录–pid-path= 指向pid文件(nginx.pid)–lock-path= 指向lock文件(nginx.lock)(安装文件锁定,防止安装文件被别人利用,或自己误操作。
        在《在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统》一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序。这是个非常令我们这些C程序员激动的事。但是我们使用ffi库写出来的程序往往比较大,因为我们可能要声明一些API的原型和结构体。比如我们看luajit的wiki中关于使用ffi调用ker
1 首页分析1.1 首页广告分析首页门户系统需要展示各种各样的广告数据。如图,以jd为例:变更频率低的数据,如何提升访问速度?1.数据做成静态页[商品详情页] 2.做缓存[Redis](memorycache)基本的思路如下:如上图此种方式 简单,直接通过数据库查询数据展示给用户即可,但是通常情况下,首页(门户系统的流量一般非常的高)不适合直接通过mysql数据库直接访问的方式来获取展示。1.2
转载 1月前
14阅读
Spring 使用 RequestBodyAdvice 来实现请求参数的加解密预处理前言在我们平常的项目开发中,一般会遇到这样的需求:对请求参数记录日志对入参进行解密和验签(在一些金融项目或者安全性要求比较高的项目中经常会出现这样的需求)对出参进行加密像打日志这种需求就比较简单了,这里主要说一下第二个问题常见解决方案针对对上面对入参进行解密和验签问题一般可以使用以下几种方案:使用 HandlerI
安装Nginx+Lua+OpenResty开发环境配置全过程实例 OpenResty由Nginx核心加很多第三方模块组成,默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。 借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。 而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更
一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图: lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的:  &nbsp
NginxLua编写脚本的基本构建块是指令。 指令用于指定何时运行用户Lua代码以及如何使用结果。 下面是显示指令执行顺序的图。 当一个请求发起一个“子请求”的时候,按照 Nginx 的术语,习惯把前者称为后者的“父请求”(parent request)。location /main { echo_location /foo; # echo_location发送子请
(写在前面:以下是在centos7系统进行软件安装)一、安装lua(下载地址Download)# 如需安装依赖,请执行以下命令,否则,跳过 yum install gcc gcc-c++ automake autoconf libtool make gd gd-devel libxslt-devel方式1:通过下载Lua安装包进行安装(本次安装暂未使用此方式进行安装)# 安装步骤参考Lua官网:h
Nginx变量主要用在日志的记录和分析,还有业务逻辑的处理。下面将介绍一些常用变量配置手段,在实际应用中发挥作用:1、$arg_name举例:请求默认去a服务,如果URL中参数是 at=5 的请求,就去b服务:location / { if ($arg_at='5') { proxy_pass http://b; }
文章目录nginx速率限流控制作用nginx具体配置实现处理突发流量nginx并发量(连接数)控制描述 nginx速率限流控制作用速率限流可以显示一个接口在1s内的访问频率,提高服务器的可用行,同时限流是解决雪崩的有效手段控制速率的方式之一就是采用漏桶算法。漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出
 Nginx Lua模块指令Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构;另外指令可以在http、server、server if、location、location if几个范围进行配置:指令所处处理阶段使用范围解释init_by_luainit_by_lua_fileloading-confighttpnginx Master进程加载配置时执行;通常
安装lua_nginx_module 模块lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty Centos和debian的安装就简单了。。 这里说下freebsd的安装: fetch http://www.lua.org/ftp/lua-5.1.4.tar.gz tar zxvf lua-5.1.4.tar.gz cd lua-5.1.4 make fr
方式一:定时任务(不推荐)没啥难度,短短几行的脚本即可#!/bin/bash # Description: rotate nginx access logs NGX_PID=`cat /usr/local/nginx/logs/nginx.pid` LOGS_DIR="/home/wwwlogs" WWW_LOG_NAME="www.demo.com.log" B2B_LOG_NAME="b
前言在我的博客中,我的个人博客,使用了Nginx作为反向代理,但是这就导致在Tomcat中获取客户端IP的值为127.0.0.1,由于后续需要查找IP所在地,进行数据统计,所以这个必须要解决。解决方案在这里,主要使用proxy_set_header设置Tomcat接收到的header信息。location / { proxy_set_header X-Real-IP $re
转载 5月前
657阅读
继续上一章NGINX源码之:event与epoll的内容,在注册完accept后的连接socket fd对应的读事件后,后续由ngx_http_wait_request_handler()处理请求读事件: 首先先看下在ngx_event_accept()方法中给连接c绑定了接收和发送的处理器: 接下来进入正文: 这里有个NGINX请求丢失的问题可以思考下:NGINX维护了一个空闲连接队列,和一个可
  • 1
  • 2
  • 3
  • 4
  • 5