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

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

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

1、OpenResty簡介

1.1 了解OpenResty

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

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

1.2 OpenResty安裝

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

支持 mac linux windows

OpenResty介紹01

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

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

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

OpenResty介紹02


測試:打開瀏覽器訪問 localhost

OpenResty介紹04-1

2、快速入門

2.1 動態(tài)輸出

我們現(xiàn)在做個(gè)最簡單的小例子,使用Lua腳本動態(tài)輸出內(nè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)在啟動nginx,然后訪問 http://localhost/hello,如果你之前啟動了,那么需要nginx -s reload

OpenResty簡介05


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

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

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

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

OpenResty簡介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 一下,頁面效果是一樣的

OpenResty簡介05

觀察以上代碼其實(shí)還會發(fā)現(xiàn)一個(gè)問題,如果我們想要處理很多個(gè)請求,那不是要在nginx里面配置N個(gè)location嗎,我們肯定不會這么做,這里可以通過nginx動態(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í)候訪問hello world的請求url就變成了 http://localhost/lua/hello 了

同理,我們在lua文件里面創(chuàng)建一個(gè)itheima.lua,就可以通過 http://localhost/lua/itheima 來訪問了


2.3 接收參數(shù)

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

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

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

local _M = {}
-- 獲取http get/post 請求參數(shù)
function _M.getArgs()
        -- 獲取http請求方式 GET or POST
       local request_method = ngx.var.request_method
      -- 這里是一個(gè)table,包含所有g(shù)et請求參數(shù)
      local args = ngx.req.get_uri_args()
      -- 如果是post參數(shù)獲取
      if "POST" == request_method then
           -- 先讀取請求體
           ngx.req.read_body()
           -- 這里也是一個(gè)table,包含所有post請求參數(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兩種傳參方式

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

conf/nginx.conf 需要添加

http {

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

    # 這里一定要指定package_path,否則會找不到引入的模塊,然后會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"

-- 獲取請求參數(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 一下

訪問 http://localhost/lua/test?name=jack

OpenResty簡介


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

3、總結(jié)

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


猜你喜歡

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

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