openresty开发系列10--openresty的简单介绍及安装
openresty開發系列10--openresty的簡單介紹及安裝
一、Nginx優點
十幾年前,互聯網沒有這么火,軟件外包開發,信息化建設,幫助企業做無紙化辦公,收銀系統,工廠erp,c/s架構偏多
Nginx設計為一個主進程多個工作進程的工作模式,每個進程是單線程來處理多個連接,而且每個工作進程采用了非阻塞I/O來處理多個連接,從而減少了線程上下文切換,從而實現了公認的高性能、高并發;因此在生成環境中會通過把CPU綁定給Nginx工作進程從而提升其性能;另外因為單線程工作模式的特點,內存占用非常少
Nginx更改配置重啟速度非常快,可以毫秒級,而且支持不停止Nginx進行升級Nginx版本、動態重載Nginx配置。
Nginx模塊也是非常多,功能也很強勁,不僅可以作為http負載均衡,Nginx發布1.9.0版本還支持TCP負載均衡,還可以很容易的實現內容緩存、web服務器、反向代理、訪問控制等功能。
nginx模塊:rewrite 經常用到的,
二、什么是ngx_lua
ngx_lua是Nginx的一個模塊,將Lua嵌入到Nginx中,從而可以使用Lua來編寫腳本,這樣就可以使用Lua編寫應用腳本,部署到Nginx中運行,即Nginx變成了一個Web容器;這樣開發人員就可以使用Lua語言開發高性能Web應用了。
網站開發,也有一個重要的腳步語言,javascript,js文件;;;客戶端腳步語言;;;(node.js服務器語言)
網站頁面進行渲染的時候,可以通過javascript腳本語言 進行一些業務處理
<script>
function hello(){
?? ?alert("hello");
}
</script>
腳本文件,還需要一個javascript引擎---解析javascript腳本語言
全部的瀏覽器 都包含 javascript引擎
lua -- javascript? 一樣的腳本語言
lua腳本語言 應用? ----> 游戲開發中
Lua是一種輕量級、可嵌入式的腳本語言,這樣可以非常容易的嵌入到其他語言中使用。另外Lua提供了協程并發,即以同步調用的方式進行異步執行,從而實現并發,比起回調機制的并發來說代碼更容易編寫和理解,排查問題也會容易。Lua還提供了閉包機制,函數可以作為First Class Value 進行參數傳遞,另外其實現了標記清除垃圾收集。
因為Lua的小巧輕量級,可以在Nginx中嵌入Lua VM,請求的時候創建一個VM,請求結束的時候回收VM。
ngx_lua模塊的原理:
ngx_lua將Lua嵌入Nginx,能夠讓Nginx運行Lua腳本,而且高并發、非堵塞的處理各種請求。Lua內建協程。這樣就能夠非常好的將異步回調轉換成順序調用的形式。ngx_lua在Lua中進行的IO操作都會托付給Nginx的事件模型。從而實現非堵塞調用。開發人員能夠采用串行的方式編寫代碼,ngx_lua會自己主動的在進行堵塞的IO操作時中斷。保存上下文;然后將IO操作托付給Nginx事件處理機制。在IO操作完畢后,ngx_lua會恢復上下文,程序繼續運行,這些操作都是對用戶程序透明的。
每一個NginxWorker進程持有一個Lua解釋器或者LuaJIT實例,被這個Worker處理的全部請求共享這個實例。
每一個請求的Context會被Lua輕量級的協程切割,從而保證各個請求是獨立的。 ngx_lua採用"one-coroutine-per-request"的處理模型。對于每一個用戶請求,ngx_lua會喚醒一個協程用于執行用戶代碼處理請求,當請求處理完畢這個協程會被銷毀。
每一個協程都有一個獨立的全局環境(變量空間),繼承于全局共享的、僅僅讀的"comman data"。所以。被用戶代碼注入全局空間的不論什么變量都不會影響其它請求的處理。而且這些變量在請求處理完畢后會被釋放,這樣就保證全部的用戶代碼都執行在一個"sandbox"(沙箱),這個沙箱與請求具有同樣的生命周期。 得益于Lua協程的支持。ngx_lua在處理10000個并發請求時僅僅須要非常少的內存。依據測試,ngx_lua處理每一個請求僅僅須要2KB的內存,假設使用LuaJIT則會更少。所以ngx_lua非常適合用于實現可擴展的、高并發的服務。
ngx_lua 模塊提供的指令和API
三、ngx_lua安裝
echo模塊
ngx_lua安裝能夠通過下載模塊源代碼,編譯Nginx。可是推薦採用openresty。Openresty就是一個打包程序,包括大量的第三方Nginx模塊,比方HttpLuaModule,HttpRedis2Module,HttpEchoModule等。省去下載模塊。而且安裝很方便。
OpenResty將Nginx核心、LuaJIT、許多有用的Lua庫和Nginx第三方模塊打包在一起;這樣開發人員只需要安裝OpenResty,不需要了解Nginx核心和寫復雜的C/C++模塊就可以,只需要使用Lua語言進行Web應用開發了。
OpenResty提供了一些常用的ngx_lua開發模塊:如
lua-resty-memcached
lua-resty-mysql
lua-resty-redis
lua-resty-dns
lua-resty-limit-traffic
lua-resty-template
nginx + lua 就可以開發出 一些系統
這些模塊涉及到如mysql數據庫、redis、限流、模塊渲染等常用功能組件;另外也有很多第三方的ngx_lua組件供我們使用,對于大部分應用場景來說現在生態環境中的組件已經足夠多了;如果不滿足需求也可以自己去寫來完成自己的需求。
openresty.org/cn官網
應用場景
應用的公司:奇虎360、京東、百度、魅族、知乎、優酷、新浪這些互聯網公司都在使用。
業務場景: WAF、有做 CDN 調度、廣告系統、消息推送系統,API server 網關
三、openresty的下載及安裝
1)下載安裝
centos系統
# yum install readline-devel pcre pcre-devel openssl openssl-devel gcc curl GeoIP-devel
下載源碼包
https://github.com/openresty/openresty/releases
選擇最新版本v1.13.6.1
解壓安裝
# tar -xzvf openresty-1.13.6.1.tar.gz
# cd openresty-1.13.6.1/
##選擇模塊 ./configure --help
# ./configure --with-luajit --with-pcre --with-http_gzip_static_module --with-http_realip_module --with-http_geoip_module --with-http_ssl_module? --with-http_stub_status_module
--with-http_gzip_static_module #靜態文件壓縮
--with-http_stub_status_module #監控nginx狀態
--with-http_realip_module #通過這個模塊允許我們改變客戶端請求頭中客戶端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意義在于能夠使得后臺服務器記錄原始客戶端的IP地址
--with-pcre #設置PCRE庫(pcre pcre-devel)
--with-http_ssl_module #使用https協議模塊。(openssl openssl-devel)
--with-http_geoip_module #增加了根據ip獲得城市信息,經緯度等模塊 (GeoIP-devel)
# make && make install
2)安裝成功后,默認會在/usr/local/openresty/
目錄下
luajit 是采用C語言寫的Lua代碼的解釋器 ----just in time?? 即時解析
lualib 是編輯好的lua類庫
nginx,其實我們openResty就是nginx,只是做了一些模塊化工作;所以啟動openResty就是啟動nginx,我們可以到 cd nginx/sbin/,直接運行? ./nginx
3)設置環境變量
# vi /etc/profile
export NGINX_HOME=/usr/local/openresty/nginx
export PATH=$PATH:$NGINX_HOME/sbin
# source /etc/profile ##生效
轉載于:https://www.cnblogs.com/reblue520/p/11429392.html
總結
以上是生活随笔為你收集整理的openresty开发系列10--openresty的简单介绍及安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty开发系列4--ngin
- 下一篇: openresty开发系列11--ope