OpenResty快速入門

1 OpenResty簡介

1.1 瞭解OpenResty

OpenResty是一個基於 Nginx 與 Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用於方便地搭建能夠處理超高併發、擴展性極高的動態 Web 應用、Web 服務和動態網關。

簡單地說OpenResty 的目標是讓你的Web服務直接跑在 Nginx 服務內部,充分利用 Nginx 的非阻塞 I/O 模

型,不僅僅對 HTTP 客戶端請求,甚至於對遠程後端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進行一致的高性能響應。

1.2 OpenResty安裝

 

 

下載對應你係統的OpenResty版本:支持 mac linux windows

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

選擇安裝目錄(建議非中文)進行解壓雙擊nginx.exe運行即可

 

 

測試:打開瀏覽器訪問 localhost

 

 

 

2 快速入門

 

2.1 動態輸出

我們現在做個最簡單的小例子,使用Lua腳本動態輸出內容,打開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>")';
}
}
}

 

 

nginx -s reload現在啓動nginx,然後訪問http://localhost/hello ,如果你之前啓動了,那麼需要nginx -s reload

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

還有一個輸出的函數是ngx.print,同樣也是輸出響應內容

2.2 優化動態輸出

上面的代碼直接把lua代碼寫到nginx配置裏面了,維護起來不是很方便,我們把它拿出來一個單獨的文件,並 放到openresty-1.13.6.2-win64目錄下面單獨的lua目錄下,方便管理

 

 

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

nginx.conf 改成這樣

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

然後nginx -s reload一下,頁面效果是一樣的

 

 

觀察以上代碼其實還會發現一個問題,如果我們想要處理很多個請求,那不是要在nginx裏面配置N個location 嗎,我們肯定不會這麼做,這裏可以通過nginx動態匹配指定lua文件名

nginx.conf 改成這樣

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

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

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

 

 

2.3 接收參數

我們知道http請求通常分爲兩種,分別是GET,POST,在http協議中,GET參數通常會緊跟在uri後面,而

POST請求參數則包含在請求體中

使用OpenResty獲取請求參數的方法也有二種,爲了統一獲取請求參數的方式,隱藏具體細節,提供一個更友 好的api接口,我們可以簡單的封裝一下

創建lua/req.lua 文件

local _M = {}

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

這個模塊就實現了參數的獲取,而且支持GET,POST兩種傳參方式

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

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;
}
}
}

創建lua/test.lua 文件

-- 引入req模塊
local req = require "req"
-- 獲取請求參數列表
local args = req.getArgs()
-- 獲取key爲name的值
local name = args['name']
-- 如果不存在指定默認值
if name == nil or name == "" then name = "xiaozhi"
end
-- 輸出結果
ngx.say("<p>hello " .. name .. "!</p>")

然後下面這步驟

 

 

3 總結

本次主要講解了OpenResty在window環境下的安裝及使用。通過本篇文章希望大家可以簡單掌握OpenResty 接收頁面請求參數及動態輸出內容,後續將給大家帶來獲取從redis獲取數據並以json格式響應給客戶端

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章