openresty(nginx+lua)学习小记
博客专区 > anoty 的博客 > 博客详情
openresty(nginx+lua)学习小记
anoty 发表于8个月前
openresty(nginx+lua)学习小记
  • 发表于 8个月前
  • 阅读 798
  • 收藏 29
  • 点赞 1
  • 评论 2

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: openresty(nginx+lua)学习小记

出于技术储备的目的研究了下openresty,恩,收获不小,有一种在旧衣服里找到钱的快感,简单记录下自己可能会用到的知识点,做个备忘。

###安装 仅限于Mac OSX系统,其他系统安装方式自行搜索

//推荐
brew tap homebrew/nginx
brew install homebrew/nginx/openresty

or

brew install nginx-full --with-lua-module

###学习前准备 nginx.conf打开日志,方便查看lua脚本或配置本身的错误

    access_log  /usr/local/var/log/nginx/access.log;
    error_log   /usr/local/var/log/nginx/error.log;

nginx配置和lua脚本变化监听并重启nginx的程序,不然每次手动重启略麻烦,这里有一个go版本

package main

import (
    "log"
    "os/exec"

    "github.com/fsnotify/fsnotify"
)

func main() {
    watcher, err := fsnotify.NewWatcher()
    if err != nil {
        log.Fatal(err)
    }
    defer watcher.Close()

    done := make(chan bool)
    go func() {
        for {
            select {
            case event := <-watcher.Events:
                log.Println("event:", event)
                if event.Op&fsnotify.Write == fsnotify.Write {
                    log.Println("modified file:", event.Name)
                }
                nginx()
            case err := <-watcher.Errors:
                log.Println("error:", err)
            }
        }
    }()

    err = watcher.Add("/path/to/file1")
    if err != nil {
        log.Fatal(err)
    }
    err = watcher.Add("/path/to/file2")//也可以监听文件夹
    if err != nil {
        log.Fatal(err)
    }
    <-done
}

func nginx() {
    cmd := exec.Command("/usr/local/bin/lunchy", "restart", "nginx") //重启命令根据自己的需要自行调整
    cmd.Run()
}

###hello,world 在nginx.conf加一段配置

server {
    listen 18080;
    location / {
            default_type text/html;
            content_by_lua_block {
                ngx.say("hello,world")
            }
    }
}

lua文件版

server {
    listen 18080;
    location / {
            default_type text/html;
            content_by_lua_file /path/to/nginx.lua;    
    }
}

nginx.lua

ngx.say("hello,world")

###lua开发准备 首先安装一个库,使用opm,openresty的包管理工具,其他的库用opm搜索。

opm install p0pr0ck5/lua-resty-cookie
//注意包的安装路径,待会要用

修改下server的配置,配置lua的package path。

lua_package_path "/usr/local/Cellar/openresty/1.11.2.2_2/site/lualib/resty/?.lua;;";
server {
    listen 18080;
    location / {
            default_type text/html;
            content_by_lua_file /path/to/nginx.lua;    
    }
}

###一两个web操作

-- COOKIE
local ck = require("cookie")
local cookie, err = ck:new()
local field, err = cookie:get("c")
cookie:set({key = "Age", value = "2333333",})
-- GET
local arg = ngx.req.get_uri_args()
ngx.say(arg.a)
for k,v in pairs(arg) do
    ngx.say("[GET ] key:", k, " v:", v)
end

###openresty能干什么 在我自己的想法里,我会用它来做灰度发布、限流、参数安全校验、api网关,当然openresty能做的事情很多。

lua很有意思。

nginx真好玩。

参考资料

  1. openresty最佳实践
  2. openresty
标签: nginx OpenResty Lua
共有 人打赏支持
粉丝 10
博文 17
码字总数 12509
评论 (2)
clouddyy
旧衣服找钱,形容的不错!
卧龙大熊猫
Mark
×
anoty
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: