海風,一個專注于研究技術的大眾人
目錄
OpenResty簡介
OpenResty安裝
OpenResty作業原理
Nginx和lua的簡介

OpenResty簡介
OpenResty是一個基于Linux的可伸縮的web平臺,提供了很多高質量的第三模塊,
OpenResty是一個強大的Web應用服務器,Web開發人員可以使用Lua腳本語言調動Nginx支持的各種C以及Lua模塊,更主要的是在性能方面,OpenResty可以快速構造出足以勝任10K以上并發連接回應的超高性能Web應用系統,
OpenResty安裝
OpenResty依賴庫有:Perl5.6.1+,libreadline,libpcre,libssl
先安裝好這些依賴庫(基于Centos系統):
yum install readline-devel pcre-devel openssl-devel
接下我們可以在官方下載最新的 OpenResty 原始碼包并解壓編譯安裝:
wget https://openresty.org/download/ngx_openresty-1.9.7.1.tar.gz # 下載
tar xzvf ngx_openresty-1.9.7.1.tar.gz # 解壓
cd ngx_openresty-1.9.7.1/
./configure
make
make install
默認情況下程式被安裝到/usr/local/openresty目錄,可以使用./configure –help查看更多的配置選項,
安裝完寫一個實體
首先創建一個作業目錄:
mkdir /home/www
cd /home/www/
mkdir logs/ conf/
其中logs用于存放日志,conf用于存放組態檔
接著我們在conf目錄下創建一個nginx.conf檔案,如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 9000;
location / {
default_type text/html;
content_by_lua '
ngx.say("<p>Hello, World!</p>")
';
}
}
}
啟動openresty
默認情況下 openresty 安裝在 /usr/local/openresty 目錄中,啟動命令為:
cd /home/www
/usr/local/openresty/nginx/sbin/nginx -p `pwd`/ -c conf/nginx.conf
實體:

如果沒有任何輸出,說明啟動成功,-p 指定我們的專案目錄,-c 指定組態檔,
接下來我們可以使用 curl 來測驗是否能夠正常運行:
curl http://localhost:9000/
輸出結果:
<p>Hello,world<p>
然后運行完再通過瀏覽器進行訪問一下:

如果瀏覽器訪問不了,可能是防火墻問題
發現centos的防火墻改成了firewall,不再叫iptables,開放埠方法如下:
firewall-cmd --zone=public --add-port=80/tcp –permanent
然后再進行重啟防火墻:
systemctl stop firewalld.service
systemctl start firewalld.service
再次重繪訪問就可以了
若后續行程埠被占用可參考此檔案進行解決:
https://blog.csdn.net/yufeng_lai/article/details/88819981
OpenResty作業原理
OpenResty又被稱為ngx_openresty,是基于Nginx的核心Web應用程式服務器
OpenResty是基于Nginx和Lua的高性能Web平臺,OpenResty通過匯聚各種設計精良的Nginx模塊,從而將Nginx有效地變成一個強大的通用Web應用平臺
OpenResty的目標是讓Web服務直接運行在Nginx服務內部,充分利用Nginx的非堵塞I/O模型,不僅對HTTP客戶端請求,甚至對遠程后端DB都進行一系列的高性能回應,
OpenResty借助于Nginx的事件驅動模型和非堵塞IO,以實作高性能的Web應用程式
OpenResty使我們可以借助于Nginx的異步非阻塞達到使用Lua異步并發訪問后端DB等服務
OpenResty使用ngx.location.capture_multi極大地減少瀏覽器的HTTP連接數量,可以異步并發的訪問后臺介面
OpenResty運行原理
Nginx采用的是master-worker模型,也就是一個master行程管理多個worker行程,基本的時間處理都放在worker行程中,master行程負責全域初始化以及對worker進行的管理,
OpenResty中,每個worker行程使用一個LuaVM,當請求被分配到worker時,將在這個LuaVM中創建一個coroutine協程,協程之間資料隔離,每個協程都具有獨立的全域變數,
OpenResty作業原理
OpenResty處理請求流程
Nginx會把一個請求分成不同階段,第三方模塊可以根據自己的行為,掛在到不同階段中以達到自身目的,OpenResty采用了同樣的特性,不同階段有著不同的處理行為,
Nginx和lua的簡介
- Nginx:
- Nginx的優點:
比apache占用更少的記憶體及資源
抗并發nginx處理請求異步非阻塞而apache則阻塞型高并發下nginx能保持低資源低消耗高性能
高度模塊化設計撰寫模塊相對簡單
- Nginx性能高,占用記憶體少
對于每個worker行程來說,獨立的行程,不需要加鎖,所以省掉了鎖帶來的開銷,同時在編程以及問題查找時,也會方便很多,其次,采用獨立的行程,可以讓互相之間不會影響,一個行程退出后,其它行程還在作業,服務不會中斷,master行程則很快啟動新的worker行程,當然,worker行程的例外退出,肯定是程式有bug了,例外退出,會導致當前worker上的所有請求失敗,不過不會影響到所有請求,所以降低風險,
Nginx是采用異步非阻塞的方式去處理請求的,什么是異步非阻塞呢?其實就是當一個執行緒呼叫出現等待的io之類的情況時,而不是阻塞在這里,而是去處理別的事情,等io準備好了,然后再去執行,具體的我就不在這里和大家描述了
2.lua
- Lua是一個小巧的腳本語言,該語言的設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴展和定制功能
- Lua的特點:
Lua腳本可以很容易的被C/C++代碼呼叫,也可以反過來呼叫C/C++的函式,這使得Lua在應用程式中可以被廣泛應用,不僅僅作為擴展腳本,也可以作為普通的組態檔,代替XML,Ini等檔案格式,并且更容易理解和維護,
Lua由標準C撰寫而成,代碼簡潔優美,幾乎在所有作業系統和平臺上都可以編譯,運行,一個完整的Lua解釋器不過200k,在目前所有腳本引擎中,Lua的速度是最快的,這一切都決定了Lua是作為嵌入式腳本的最佳選擇,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/292917.html
標籤:其他
上一篇:Android架構設計——MVC
下一篇:nginx問題的影響
