Skip to content
Go back

OpenResty 初探

OpenResty 是一个基于Nginx 与Lua 的高性能Web 平台,其内部集成了大量精良的Lua 库、第三方模块以及大多数的依赖项。

安装

Centos 为例:

# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/

# update the yum index:
sudo yum check-update

# install
sudo yum install openresty

运行 openresty -h 查看帮助信息

nginx version: openresty/1.17.8.2
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/openresty/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file

可以看到nginx默认路径为:/usr/local/openresty/nginx/。如果时从nginx迁移到openresty,只需要将相关配置复制过来即可。

注意:openresty 内部 nginx 版本和 openresty 版本差不多。openresty/1.17.8.2对应nginx版本1.17。

使用 Redis 示例

nginx.conf http模块增加:

init_by_lua '
        json = require "cjson";
        redis = require "resty.redis"
    ';

include /usr/local/openresty/nginx/conf/conf.d/*.conf;

test.conf

server {
    listen       8080;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    set $redis_host "127.0.0.1";
    set $redis_port "6379";
    set $redis_pass "123";

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

		location /lua {
	        default_type 'text/html';
	        content_by_lua 'ngx.say("hello world")';
	  }

    location = /kvs
    {
        content_by_lua '
           local red = redis:new()
           local ok, err = red:connect(ngx.var.redis_host, ngx.var.redis_port)
           if not ok then
                ngx.say("failed to connect: ", err)
                return
           end
           local ok, err = red:auth(ngx.var.redis_pass)
           if not ok then
                ngx.say("failed to auth: ", err)
                return
           end

           local keys, err = red:keys("*")
           ngx.header.content_type = "text/plain"
           local kvs = {}
           for i, key in ipairs(keys) do
             kvs[key] = red:get(key)
           end
           ngx.say(json.encode(kvs))
        ';
    }
}

解释:

参考:


Share this post on:

Previous Post
非 Laravel 项目使用 Eloquent
Next Post
PHP 运行机制和 LNMP 架构