资讯专栏INFORMATION COLUMN

OpenResty安装、配置与使用

stackfing / 3000人阅读

摘要:用于方便地搭建能够处理超高并发扩展性极高的动态应用服务和动态网关。安装安装依赖库下载及安装激活组件被用于构建。大部组件默认是激活的,也有部件不是。您需要通过以下选项在编译的时候将它们各自激活,和。

OpenResty简介

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

Lua简介

Lua是一个简洁、轻量、可扩展的程序设计语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。

OpenResty安装

1.安装依赖库

yum install readline-devel pcre-devel openssl-devel gcc

2.下载及安装OpenResty

wget https://openresty.org/download/openresty-1.9.15.1.tar.gz
tar xvf openresty-1.9.15.1.tar.gz
cd openresty-1.9.15.1
./configure --with-luajit && make && make install

激活LuaJIT

组件被用于构建 OpenResty。所有的组件可以被激活或禁止。 大部组件默认是激活的,也有部件不是。 LuaJIT、 DrizzleNginxModule、PostgresNginxModule和IconvNginxModule 默认是没有激活的。您需要通过以下选项在编译 OpenResty的时候将它们各自激活, --with-luajit、 --with-http_drizzle_module、 --with-http_postgres_module和 --with-http_iconv_module 。

安装好的OpenResty

从上图可以看到,openresty在/usr/local目录下

OpenResty启动

通过下述方式启动Nginx。如果没有任何输出,说明启动成功,-p 指定我们的项目目录,-c 指定配置文件。

/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
/usr/local/openresty/nginx/sbin/nginx -p "pwd" -c /usr/local/openresty/nginx/conf/nginx.conf

为openresty下的nginx建立软链(非必需)

ln -s /usr/local/openresty/nginx/sbin/nginx  /usr/sbin/nginx

则可使用如下方式启动

/usr/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf

在浏览器中访问:

OpenResty配置Lua

由于原生的Nginx日志没有resp_body这一选项,通过在nginx.conf中添加Lua脚本的方式定义resp_body。

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
                      "$status $body_bytes_sent "$http_referer" "
                      ""$http_user_agent" "$http_x_forwarded_for"";

    log_format log_resp_body  "$remote_addr - $remote_user [$time_local] "$request" "
                      "$status $body_bytes_sent "$http_referer" "
                      ""$http_user_agent" "$http_x_forwarded_for" "
                      "$request_time $bytes_sent $request_length "$request_body" "$resp_body"";

    access_log  logs/access.log  main;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        access_log  logs/access.index.log  log_resp_body;

        lua_need_request_body on;

        set $resp_body "";

        body_filter_by_lua "
            local resp_body = string.sub(ngx.arg[1], 1, 1000)
            ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
            if ngx.arg[2] then
                ngx.var.resp_body = ngx.ctx.buffered
            end
        ";

        location / {
            root   html;
            index  index.html index.htm;
        }

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

检测Nginx配置是否正确

/usr/sbin/nginx -t

重启Nginx

/usr/sbin/nginx -s reload

验证Lua配置是否成功

tail -f access.log

tail -f access.index.log

参考资料:

OpenResty
OpenResty中文站
nginx-lua
lua-nginx-module

20160615更正:

实践证明,上面body_filter_by_lua中的代码存在bug,可通过如下方式更正:

body_filter_by_lua "
    local maxlen = 1000
    ngx.ctx.buffered = ngx.ctx.buffered or ""
    if #ngx.ctx.buffered < maxlen then
        ngx.ctx.buffered = ngx.ctx.buffered .. string.sub(ngx.arg[1], 1, maxlen - #ngx.ctx.buffered)
    end
    if ngx.arg[2] then
        ngx.var.resp_body = ngx.ctx.buffered
    end
";

感谢OpenResty 中文邮件列表

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39303.html

相关文章

  • (学习到实践)六、docker自定义nginx/openresty

    摘要:但官方没有发布相关东西,所以以结合安装参考官方的为原则编写。运行测试运行成功,大小,太大了感觉,提交到云端。启动官方镜像提交到云端,偶然想搜索下有没有,竟然反问有官方镜像,了个下来,还不错。 前言 为什么要使用openresty? 官方说明:OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项...

    BingqiChen 评论0 收藏0
  • 日志平台(网关层) - 基于Openresty+ELKF+Kafka

    摘要:现在用方式调用接口,中使用方式输入内容日志平台网关层基于。日志平台网关层基于到此为止,提取经过网关的接口信息,并将其写入日志文件就完成了,所有的接口日志都写入了文件中。 背景介绍 1、问题现状与尝试 没有做日志记录的线上系统,绝对是给系统运维人员留下的坑。尤其是前后端分离的项目,后端的接口日志可以解决对接、测试和运维时的很多问题。之前项目上发布的接口都是通过Oracle Service...

    xumenger 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<