Nginx與Lua
火雲邪神語錄:天下武功,無堅不破,唯快不破! Nginx的看家本領就是速度,Lua的拿手好戲亦是速度,這兩者的結合在速度上無疑有基因上的優勢。
最先將Nginx,Lua組合在一起的是OpenResty,它有一個ngx_lua模組,將Lua嵌入到了Nginx裡面;隨後Tengine也包含了ngx_lua模組。至於二者的差別:OpenResty是Nginx的Bundle;而Tengine則是Nginx的Fork。值得一提的是,OpenResty和Tengine都是國人自己創造的項目,前者主要由春哥和曉哲開發,後者主要由淘寶打理。
至於OpenResty和Tengine孰優孰劣,留給大家自己判斷,如下資料可供參考:
- ngx_openresty: an Nginx ecosystem glued by Lua
- 淘寶網Nginx應用、客製化與開發實戰
推薦看看春哥在Tech-Club上關於『由Lua黏合的Nginx生態環境』的演講實錄,有料!
安裝
需要最新版的Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安裝檔。
安裝Lua或LuaJIT都是可以的,但是出於效率的考慮,建議安裝LuaJIT。
因為安裝在缺省路徑,所以LuaJIT對應的lib,include都在/usr/local目錄裡。
下面就可以編譯Nginx了:
試著啟動一下Nginx看看,如果你運氣不好的話,可能會遇到如下錯誤:
cannot open shared object file: No such
dicannot open shared object file: No such filefileorrectory這是神馬情況?可以用ldd指令來看看:
此類問題通常使用ldconfig指令就能解決:
再試著啟動Nginx看看,應該就OK了。
應用
我們先用一個簡單的程式來暖暖場:把下面的程式碼加入到Nginx的設定檔nginx.conf,並重啟Nginx,然後瀏覽,就能看到效果了。
在深入學習ngx_lua之前,建議大家仔細閱讀一遍春哥寫的Nginx教學。
這裡我就說關鍵的:Nginx設定檔所使用的語言本質上是『聲明性的』,而非『過程性的』。 Nginx處理請求的時候,指令的執行並不是由定義指令時的物理順序來決定的,而是取決於指令所屬的階段,Nginx常用的階段按先後順序有:rewrite階段,access階段,content階段等等。示範程式碼中的set指令屬於rewrite階段,content_by_lua指令屬於content階段,如果試著把兩個指令的順序交換一下,會發現程式依然能夠正常運作。
下面我們試著結合Redis寫個比較實戰一點的例子。
首先,我們需要建立一個Redis設定檔config.json,內容如下:
然後,我們建立一個解析設定檔的腳本init.lua,其中用到了Lua CJSON模組:
說明:程式碼裡用到了共享內存,這樣就不必每次請求都解析一遍設定檔了。
接著,我們建立一個渲染內容的腳本content.lua,用到了Resty Redis模組:
說明:建議把Resty Redis模組放到vendor目錄下,稍後在Nginx中統一設定。
最後,我們需要在Nginx設定檔裡設定一下:
說明:為了方便調試,我關閉了lua_code_cache,如果是生產環境,應該開啟它。
另外,安裝CJSON的時候,需要注意Makefile檔案裡頭檔的路徑,缺省是:
如果安裝的是LuaJIT的話,最好把頭檔拷貝到對應目錄:
…
我最近參與的一個項目,提供了一些用於Web輪詢的接口,都是用Nginx+Lua實現的,雖然總共只有十幾台伺服器,但是每天可以提供幾十億次的請求量,賊拉拉的強。
最後,讓我引用某位屌絲的語錄做結束語吧:Lua,未婚男性程式設計師的最愛。
此條目由老王發表在Technical分類目錄,並貼了Lua、Nginx標籤。將固定連結加入收藏夾。《NGINX與LUA》上有29條評論
以上就介紹了nginx教程,包含了方面的內容,希望對PHP教程有興趣的朋友有幫助。

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

使用依賴注入(DI)的原因是它促進了代碼的松耦合、可測試性和可維護性。 1)使用構造函數注入依賴,2)避免使用服務定位器,3)利用依賴注入容器管理依賴,4)通過注入依賴提高測試性,5)避免過度注入依賴,6)考慮DI對性能的影響。

phpperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovessetimes.2)優化

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

TOOPTIMIZEPHPAPPLICITIONSFORPERSTORANCE,USECACHING,數據庫imization,opcodecaching和SererverConfiguration.1)InlumentCachingWithApcutCutoredSatfetchTimes.2)優化的atabasesbasesebasesebasesbasesbasesbaysbysbyIndexing,BeallancingAndWriteExing

依賴性注射inphpisadesignpatternthatenhancesFlexibility,可檢驗性和ManiaginabilybyByByByByByExternalDependencEctenceScoupling.itallowsforloosecoupling,EasiererTestingThroughMocking,andModularDesign,andModularDesign,butquirscarecarefulscarefullsstructoringDovairing voavoidOverOver-Inje

PHP性能優化可以通過以下步驟實現:1)在腳本頂部使用require_once或include_once減少文件加載次數;2)使用預處理語句和批處理減少數據庫查詢次數;3)配置OPcache進行opcode緩存;4)啟用並配置PHP-FPM優化進程管理;5)使用CDN分發靜態資源;6)使用Xdebug或Blackfire進行代碼性能分析;7)選擇高效的數據結構如數組;8)編寫模塊化代碼以優化執行。

opcodecachingsimplovesphperforvesphpermance bycachingCompiledCode,reducingServerLoadAndResponSetimes.1)itstorescompiledphpcodeinmemory,bypassingparsingparsingparsingandcompiling.2)useopcachebachebachebachebachebachebachebysettingparametersinphametersinphp.ini,likeememeryconmorysmorysmeryplement.33)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。