国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

nginx教學(xué)

Aug 08, 2016 am 09:23 AM
lua nginx quot shell

Nginx與Lua

火雲(yún)邪神語(yǔ)錄:天下武功,無(wú)堅(jiān)不破,唯快不破! Nginx的看家本領(lǐng)就是速度,Lua的拿手好戲亦是速度,這兩者的結(jié)合在速度上無(wú)疑有基因上的優(yōu)勢(shì)。

最先將Nginx,Lua組合在一起的是OpenResty,它有一個(gè)ngx_lua模組,將Lua嵌入到了Nginx裡面;隨後Tengine也包含了ngx_lua模組。至於二者的差別:OpenResty是Nginx的Bundle;而Tengine則是Nginx的Fork。值得一提的是,OpenResty和Tengine都是國(guó)人自己創(chuàng)造的項(xiàng)目,前者主要由春哥和曉哲開發(fā),後者主要由淘寶打理。

至於OpenResty和Tengine孰優(yōu)孰劣,留給大家自己判斷,如下資料可供參考:

  • ngx_openresty: an Nginx ecosystem glued by Lua
  • 淘寶網(wǎng)Nginx應(yīng)用、客製化與開發(fā)實(shí)戰(zhàn)

推薦看看春哥在Tech-Club上關(guān)於『由Lua黏合的Nginx生態(tài)環(huán)境』的演講實(shí)錄,有料!

安裝

需要最新版的Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安裝檔。

安裝Lua或LuaJIT都是可以的,但是出於效率的考慮,建議安裝LuaJIT。

shell> wget http://luajit.org/download/LuaJIT-.tar.gz shell> tar zxvf LuaJIT-.tar.gz shell> cd LuaJIT- shell> make shell> make install

因?yàn)榘惭b在缺省路徑,所以LuaJIT對(duì)應(yīng)的lib,include都在/usr/local目錄裡。

shell> export LUAJIT_LIB=/usr/local/lib shell> export LUAJIT_INC=/usr/local/include/luajit-

下面就可以編譯Nginx了:

shell> wget http://nginx.org/download/nginx-.tar.gz shell> tar zxvf nginx-.tar.gz shell> cd nginx- shell> ./configure --add-module=/path/to/ngx_lua \ --add-module=/path/to/ngx_devel_kit shell> make shell> make install

試著啟動(dòng)一下Nginx看看,如果你運(yùn)氣不好的話,可能會(huì)遇到如下錯(cuò)誤:

cannot open shared object file: No such

dicannot open shared object file: No such filefileorrectory

這是神馬情況?可以用ldd指令來(lái)看看:

shell> ldd /path/to/nginx libluajit-.so => not found

此類問(wèn)題通常使用ldconfig指令就能解決:

shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf shell> ldconfig

再試著啟動(dòng)Nginx看看,應(yīng)該就OK了。

應(yīng)用

我們先用一個(gè)簡(jiǎn)單的程式來(lái)暖暖場(chǎng):把下面的程式碼加入到Nginx的設(shè)定檔nginx.conf,並重啟Nginx,然後瀏覽,就能看到效果了。

location /lua { set $test "hello, world."; content_by_lua ' ngx.header.content_type = "text/plain"; ngx.say(ngx.var.test); '; }

在深入學(xué)習(xí)ngx_lua之前,建議大家仔細(xì)閱讀一遍春哥寫的Nginx教學(xué)。

這裡我就說(shuō)關(guān)鍵的:Nginx設(shè)定檔所使用的語(yǔ)言本質(zhì)上是『聲明性的』,而非『過(guò)程性的』。 Nginx處理請(qǐng)求的時(shí)候,指令的執(zhí)行並不是由定義指令時(shí)的物理順序來(lái)決定的,而是取決於指令所屬的階段,Nginx常用的階段按先後順序有:rewrite階段,access階段,content階段等等。示範(fàn)程式碼中的set指令屬於rewrite階段,content_by_lua指令屬於content階段,如果試著把兩個(gè)指令的順序交換一下,會(huì)發(fā)現(xiàn)程式依然能夠正常運(yùn)作。

下面我們?cè)囍Y(jié)合Redis寫個(gè)比較實(shí)戰(zhàn)一點(diǎn)的例子。

首先,我們需要建立一個(gè)Redis設(shè)定檔config.json,內(nèi)容如下:

{ "host": "", "port": "" }

然後,我們建立一個(gè)解析設(shè)定檔的腳本init.lua,其中用到了Lua CJSON模組:

local cjson = require "cjson"; local config = ngx.shared.config; local file = io.open("config.json", "r"); local content = cjson.decode(file:read("*all")); file:close(); for name, value in pairs(content) do config:set(name, value); end

說(shuō)明:程式碼裡用到了共享內(nèi)存,這樣就不必每次請(qǐng)求都解析一遍設(shè)定檔了。

接著,我們建立一個(gè)渲染內(nèi)容的腳本content.lua,用到了Resty Redis模組:

ngx.header.content_type = "text/plain"; local redis = require "resty.redis"; local config = ngx.shared.config; local instance = redis:new(); local host = config:get("host"); local port = config:get("port"); local ok, err = instance:connect(host, port); if not ok then ngx.log(ngx.ERR, err); ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE); end instance:set("name", "laowang"); local name = instance:get("name") instance:close(); ngx.say("name: ", name);

說(shuō)明:建議把Resty Redis模組放到vendor目錄下,稍後在Nginx中統(tǒng)一設(shè)定。

最後,我們需要在Nginx設(shè)定檔裡設(shè)定一下:

lua_shared_dict config 1m; lua_package_path "/path/to/vendor/?.lua;;"; init_by_lua_file /path/to/init.lua; server { lua_code_cache off; location /lua { content_by_lua_file /path/to/content.lua; } ... }

說(shuō)明:為了方便調(diào)試,我關(guān)閉了lua_code_cache,如果是生產(chǎn)環(huán)境,應(yīng)該開啟它。

另外,安裝CJSON的時(shí)候,需要注意Makefile檔案裡頭檔的路徑,缺省是:

PREFIX = /usr/local LUA_INCLUDE_DIR = $(PREFIX)/include

如果安裝的是LuaJIT的話,最好把頭檔拷貝到對(duì)應(yīng)目錄:

cp /usr/local/include/luajit-/* /usr/local/include/

我最近參與的一個(gè)項(xiàng)目,提供了一些用於Web輪詢的接口,都是用Nginx+Lua實(shí)現(xiàn)的,雖然總共只有十幾臺(tái)伺服器,但是每天可以提供幾十億次的請(qǐng)求量,賊拉拉的強(qiáng)。

最後,讓我引用某位屌絲的語(yǔ)錄做結(jié)束語(yǔ)吧:Lua,未婚男性程式設(shè)計(jì)師的最愛(ài)。

此條目由老王發(fā)表在Technical分類目錄,並貼了Lua、Nginx標(biāo)籤。將固定連結(jié)加入收藏夾。

NGINX與LUA》上有29條評(píng)論


以上就介紹了nginx教程,包含了方面的內(nèi)容,希望對(duì)PHP教程有興趣的朋友有幫助。

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

docker怎麼啟動(dòng)容器 docker怎麼啟動(dòng)容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動(dòng)步驟:拉取容器鏡像:運(yùn)行 "docker pull [鏡像名稱]"。創(chuàng)建容器:使用 "docker create [選項(xiàng)] [鏡像名稱] [命令和參數(shù)]"。啟動(dòng)容器:執(zhí)行 "docker start [容器名稱或 ID]"。檢查容器狀態(tài):通過(guò) "docker ps" 驗(yàn)證容器是否正在運(yùn)行。

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過(guò)以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

怎麼查看nginx是否啟動(dòng) 怎麼查看nginx是否啟動(dòng) Apr 14, 2025 pm 01:03 PM

確認(rèn) Nginx 是否啟動(dòng)的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統(tǒng)日誌中 Nginx 啟動(dòng)消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker怎麼創(chuàng)建容器 docker怎麼創(chuàng)建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創(chuàng)建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創(chuàng)建容器: docker run [選項(xiàng)] [鏡像名] [命令] 3. 啟動(dòng)容器: docker start [容器名]

nginx怎麼啟動(dòng) nginx怎麼啟動(dòng) Apr 14, 2025 pm 01:06 PM

問(wèn)題:如何啟動(dòng) Nginx?答案:安裝 Nginx啟動(dòng) Nginx驗(yàn)證 Nginx 是否已啟動(dòng)探索其他啟動(dòng)選項(xiàng)自動(dòng)啟動(dòng) Nginx

在Nginx和Apache之間進(jìn)行選擇:適合您的需求 在Nginx和Apache之間進(jìn)行選擇:適合您的需求 Apr 15, 2025 am 12:04 AM

NGINX和Apache各有優(yōu)劣,適合不同場(chǎng)景。 1.NGINX適合高並發(fā)和低資源消耗場(chǎng)景。 2.Apache適合需要復(fù)雜配置和豐富模塊的場(chǎng)景。通過(guò)比較它們的核心特性、性能差異和最佳實(shí)踐,可以幫助你選擇最適合需求的服務(wù)器軟件。

centos下phpstorm性能優(yōu)化方法 centos下phpstorm性能優(yōu)化方法 Apr 14, 2025 pm 05:30 PM

提升CentOS系統(tǒng)下PhpStorm性能的實(shí)用技巧本文提供多種方法,幫助您優(yōu)化CentOS系統(tǒng)中PhpStorm的性能,從而提高開發(fā)效率。在實(shí)施任何優(yōu)化措施前,請(qǐng)務(wù)必備份重要數(shù)據(jù)并在測(cè)試環(huán)境中驗(yàn)證效果。一、系統(tǒng)級(jí)優(yōu)化精簡(jiǎn)系統(tǒng)服務(wù):禁用不必要的系統(tǒng)服務(wù)和守護(hù)進(jìn)程,減少系統(tǒng)資源占用。無(wú)界面模式:如果不需要圖形界面,切換到無(wú)界面模式可顯著節(jié)省資源。卸載冗余軟件:移除不再使用的軟件包和服務(wù),釋放系統(tǒng)資源。二、PHP配置優(yōu)化啟用OPcache:安裝并配置OPcache擴(kuò)展,顯

NGINX與Apache:性能,可伸縮性和效率 NGINX與Apache:性能,可伸縮性和效率 Apr 19, 2025 am 12:05 AM

NGINX和Apache都是強(qiáng)大的Web服務(wù)器,各自在性能、可擴(kuò)展性和效率上有獨(dú)特的優(yōu)勢(shì)和不足。 1)NGINX在處理靜態(tài)內(nèi)容和反向代理時(shí)表現(xiàn)出色,適合高並發(fā)場(chǎng)景。 2)Apache在處理動(dòng)態(tài)內(nèi)容時(shí)表現(xiàn)更好,適合需要豐富模塊支持的項(xiàng)目。選擇服務(wù)器應(yīng)根據(jù)項(xiàng)目需求和場(chǎng)景來(lái)決定。

See all articles