openresty简单使用

2021-09-13  本文已影响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改变参数,发现请求不同的服务器

上一篇下一篇

猜你喜欢

热点阅读