首頁(yè)技術(shù)文章正文

OpenResty安裝和快速入門教程[java培訓(xùn)]

更新時(shí)間:2020-03-15 來(lái)源:黑馬程序員 瀏覽量:

1、OpenResty簡(jiǎn)介

1.1 了解OpenResty

OpenResty是一個(gè)基于 Nginx 與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。

簡(jiǎn)單地說(shuō)OpenResty 的目標(biāo)是讓你的Web服務(wù)直接跑在 Nginx 服務(wù)內(nèi)部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對(duì) HTTP 客戶端請(qǐng)求,甚至于對(duì)遠(yuǎn)程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進(jìn)行一致的高性能響應(yīng)。推薦了解傳智播客java培訓(xùn)課程

1.2 OpenResty安裝

·下載對(duì)應(yīng)你系統(tǒng)的OpenResty版本:http://openresty.org/cn/download.html

支持 mac linux windows

OpenResty介紹01

(我們現(xiàn)在使用的windows平臺(tái)版本是1.13.6.2)

·選擇安裝目錄(建議非中文)進(jìn)行解壓

雙擊nginx.exe運(yùn)行即可

OpenResty介紹02


測(cè)試:打開(kāi)瀏覽器訪問(wèn) localhost

OpenResty介紹04-1

2、快速入門

2.1 動(dòng)態(tài)輸出

我們現(xiàn)在做個(gè)最簡(jiǎn)單的小例子,使用Lua腳本動(dòng)態(tài)輸出內(nèi)容,打開(kāi)openresty-1.13.6.2-win64目錄下的conf/nginx.conf文件

在server中新增以下代碼

location /hello {
    default_type text/html;
    content_by_lua 'ngx.say("<p>hello, world</p>")';
}


類似這樣

http {
    server {
    listen 80;
    server_name localhost;
        location / {
            default_type text/html;
            content_by_lua 'ngx.say("<p>hello, world</p>")';
        }
    }
}

現(xiàn)在啟動(dòng)nginx,然后訪問(wèn) http://localhost/hello,如果你之前啟動(dòng)了,那么需要nginx -s reload

OpenResty簡(jiǎn)介05


通過(guò)ngx.say 我們可以往客戶端輸出響應(yīng)文本,是不是跟咱們tomcat response.write很像嘻嘻,后期我們會(huì)使用它輸出json。

還有一個(gè)輸出的函數(shù)是ngx.print,同樣也是輸出響應(yīng)內(nèi)容。

2.2 優(yōu)化動(dòng)態(tài)輸出

上面的代碼直接把lua代碼寫到nginx配置里面了,維護(hù)起來(lái)不是很方便,我們把它拿出來(lái)一個(gè)單獨(dú)的文件,并放到openresty-1.13.6.2-win64目錄下面單獨(dú)的lua目錄下,方便管理

OpenResty簡(jiǎn)介16

新建lua/hello.lua 文件,并編寫代碼

ngx.say("<p>hello, world</p>")

nginx.conf 改成這樣

location / {
    default_type text/html;
    content_by_lua_file lua/hello.lua;
}

然后nginx -s reload 一下,頁(yè)面效果是一樣的

OpenResty簡(jiǎn)介05

觀察以上代碼其實(shí)還會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,如果我們想要處理很多個(gè)請(qǐng)求,那不是要在nginx里面配置N個(gè)location嗎,我們肯定不會(huì)這么做,這里可以通過(guò)nginx動(dòng)態(tài)匹配指定lua文件名。

nginx.conf 改成這樣

location ~ /lua/(.+) {
    content_by_lua_file lua/$1.lua;
}

新建lua/itheima.lua 文件,并編寫代碼

ngx.print("<p>hello,itheima</p>")

然后nginx -s reload 一下

這個(gè)時(shí)候訪問(wèn)hello world的請(qǐng)求url就變成了 http://localhost/lua/hello 了

同理,我們?cè)趌ua文件里面創(chuàng)建一個(gè)itheima.lua,就可以通過(guò) http://localhost/lua/itheima 來(lái)訪問(wèn)了


2.3 接收參數(shù)

我們知道http請(qǐng)求通常分為兩種,分別是GET,POST,在http協(xié)議中,GET參數(shù)通常會(huì)緊跟在uri后面,而POST請(qǐng)求參數(shù)則包含在請(qǐng)求體中。

使用OpenResty獲取請(qǐng)求參數(shù)的方法也有二種,為了統(tǒng)一獲取請(qǐng)求參數(shù)的方式,隱藏具體細(xì)節(jié),提供一個(gè)更友好的api接口,我們可以簡(jiǎn)單的封裝一下

創(chuàng)建lua/req.lua 文件

local _M = {}
-- 獲取http get/post 請(qǐng)求參數(shù)
function _M.getArgs()
        -- 獲取http請(qǐng)求方式 GET or POST
       local request_method = ngx.var.request_method
      -- 這里是一個(gè)table,包含所有g(shù)et請(qǐng)求參數(shù)
      local args = ngx.req.get_uri_args()
      -- 如果是post參數(shù)獲取
      if "POST" == request_method then
           -- 先讀取請(qǐng)求體
           ngx.req.read_body()
           -- 這里也是一個(gè)table,包含所有post請(qǐng)求參數(shù)
           local postArgs = ngx.req.get_post_args()
           if postArgs then
                  for k, v in pairs(postArgs) do
                       args[k] = v
                  end
           end
      end
      return args
end

return _M

這個(gè)模塊就實(shí)現(xiàn)了參數(shù)的獲取,而且支持GET,POST兩種傳參方式

接下來(lái)我們可以寫一個(gè)簡(jiǎn)單的lua,來(lái)引入這個(gè)模塊,然后測(cè)試一下效果

conf/nginx.conf 需要添加

http {

    lua_package_path C:\Users\Ys\Desktop\openresty\openresty-1.13.6.2-win64\lua\?.lua;

    # 這里一定要指定package_path,否則會(huì)找不到引入的模塊,然后會(huì)500
    server {
        listen 80;
        server_name localhost;
        lua_code_cache off;
        location ~ /lua/(.+) {
            default_type text/html;
            content_by_lua_file lua/$1.lua;
        }
    }
}

創(chuàng)建lua/test.lua 文件

-- 引入req模塊

local req = require "req"

-- 獲取請(qǐng)求參數(shù)列表

local args = req.getArgs()

-- 獲取key為name的值

local name = args['name']

-- 如果不存在指定默認(rèn)值

if name == nil or name == "" then

    name = "xiaozhi"

end

-- 輸出結(jié)果

ngx.say("<p>hello " .. name .. "!</p>")

然后nginx -s reload 一下

訪問(wèn) http://localhost/lua/test?name=jack

OpenResty簡(jiǎn)介


響應(yīng)客戶端默認(rèn)的參數(shù)

3、總結(jié)

本次主要講解了OpenResty在window環(huán)境下的安裝及使用。通過(guò)本篇文章希望大家可以簡(jiǎn)單掌握OpenResty接收頁(yè)面請(qǐng)求參數(shù)及動(dòng)態(tài)輸出內(nèi)容,后續(xù)將給大家?guī)?lái)獲取從redis獲取數(shù)據(jù)并以json格式響應(yīng)給客戶端。


猜你喜歡

Java中強(qiáng)引用、軟引用、弱引用和虛引用分別是什么?

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!