美文网首页
openresty简单使用

openresty简单使用

作者: 念䋛 | 来源:发表于2021-09-13 21:45 被阅读0次

    下载地址 http://openresty.org/cn/download.html
    OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
    OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
    OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
    参考 组件 可以知道 OpenResty® 中包含了多少软件
    参考 上路 学习如何从最简单的 hello world 开始使用 OpenResty® 开发 HTTP 业务,或前往 下载 直接获取 OpenResty® 的源代码包开始体验。
    官网的介绍,可以发现OpenResty是nginx为基础,从目录也可以看到nginx的痕迹.
    本文介绍如何使用lua脚本,对http路径做分发
    lua脚本需要几个文件从下面路径下载
    https://github.com/ledgetech/lua-resty-http
    赋值http.lua http_connect.lua http_headers.lua 三个文件赋值到
    openresty-1.19.9.1-win64\openresty-1.19.9.1-win64\lualib\resty

    首先是nginx.conf 主要查看 include lua.conf;这个脚本

    http {
        include       mime.types;
        default_type  application/octet-stream;
       #引入lua.conf脚本    
        include lua.conf;
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
        #access_log  logs/access.log  main;
        sendfile        on;
        #tcp_nopush     on;
        #keepalive_timeout  0;
        keepalive_timeout  65;
        #gzip  on;
        server {
            listen       8089;
            server_name  localhost;
            #charset koi8-r;
            #access_log  logs/host.access.log  main;
            location / {
                root   html;
                index  index.html index.htm;
            }
            #error_page  404              /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }  
        }
    }
    

    lua.conf; 这里也引入了lua脚本,这里的路径要使用据对路径,相对路径找不到

     server {
            listen 8300;
            location /product {
              default_type 'text/html;charset=UTF-8';
              lua_code_cache on; 
              content_by_lua_file C:/Users/Administrator/Desktop/openresty-1.19.9.1-win64/openresty-1.19.9.1-win64/distribution.lua;
              }   
    }
    

    distribution.lua脚本

    --获取请求路径的参数
    local uri_args = ngx.req.get_uri_args() 
    --获取productId
    local productId = uri_args["productId"]
    --定义不同的服务器
    local host = {"127.0.0.1:9092","127.0.0.1:9093"} 
    --hash值
    local hash = ngx.crc32_long(productId)
    hash = (hash % 2) + 1
    backend = "http://"..host[hash]
    local method = uri_args["method"]
    local requestBody = "/"..method.."?productId="..productId
    --获取http
    local http = require("resty.http")  
    --httpc是http请求
    local httpc = http.new()  
    --获取返回值,和错误信息固定格式
    local resp, err = httpc:request_uri(backend, {  
        method = "GET",  
        path = requestBody,
        keepalive=false
    })
    --如果请求结果有错误,返回错误信息
    if not resp then  
        ngx.say("request error :", err)  
        return  
    end
    --如果没有错误,把返回值,返回给前台
    ngx.say(resp.body)  
    --关闭http
    httpc:close() 
    

    http://127.0.0.1:8300/product?productId=5&method=hello
    productId改变参数,发现请求不同的服务器

    相关文章

      网友评论

          本文标题:openresty简单使用

          本文链接:https://www.haomeiwen.com/subject/zxzxgltx.html