日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

nginx lua 小项目:根据 user_agent 显示不同的页面,附带和 php 性能的对比

發(fā)布時間:2025/4/5 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx lua 小项目:根据 user_agent 显示不同的页面,附带和 php 性能的对比 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

怎么快速學(xué)習(xí)一門新的語言呢?
如果你已經(jīng)熟練掌握了一門語言,那么其他語言都是想通的。一個小小的需求,可能會遇到很多問題,但是搜索相關(guān)的關(guān)鍵字,就能快速實(shí)現(xiàn)出來,完成一個小目標(biāo),事半功倍。
死記硬背手冊,太枯燥了,反正我是看不下去,不如直接來個小項(xiàng)目。

一個小需求

pc、mobile 一個地址有兩套頁面,需要在后端根據(jù)瀏覽器的 user_agent 來顯示不同的頁面。
通過 php 來做,當(dāng)然可以,但是活動頁面訪問量一般都比較大,想優(yōu)化些,所以想嘗試下 lua。

nginx 安裝 lua-nginx-module

可以直接上 openresty,不過有時候就是想折騰。
安裝的步驟 https://mengkang.net/994.html (如果你想實(shí)踐的話再看吧)

lua demo 腳本

-- 判斷是否是手機(jī)瀏覽器 function isMobile(userAgent)-- 99% 前三個都能匹配上吧local mobile = {"phone", "android", "mobile", "itouch", "ipod", "symbian", "htc", "palmos", "blackberry", "opera mini", "windows ce", "nokia", "fennec","hiptop", "kindle", "mot", "webos", "samsung", "sonyericsson", "wap", "avantgo", "eudoraweb", "minimo", "netfront", "teleca"}userAgent = string.lower(userAgent)for i, v in ipairs(mobile) doif string.match(userAgent, v) thenreturn trueendendreturn false end-- 根據(jù)id + 瀏覽器類型展示活動頁面 function showPromotionHtml(id, isMobile)local path = "/data/www/mengkang/demo/promotion/"local filenameif isMobile thenpath = path .. "mobile"elsepath = path .. "pc"endfilename = path .. "/" .. id .. ".html"if file_exists(filename) thenlocal file = io.open(filename,"r")io.input(file)print(io.read("*a"))io.close(file)elseprint("文件不存在: " .. string.gsub(filename, "/data/www/mengkang/demo", ""))end end-- 判斷文件是否存在 function file_exists(path)local file = io.open(path, "rb")if file then file:close() endreturn file ~= nil endlocal id = 1 local userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36" showPromotionHtml(id, isMobile(userAgent))

小結(jié)

作為一個 lua 菜鳥,通過這個小需求我查了哪些資料

變量的定義
函數(shù)的寫法
循環(huán)的了解
判斷邏輯的寫法
注釋的寫法
文件 i/o
字符串拼接 ..
字符串查找 string.match
字符串轉(zhuǎn)小寫 string.lower

稍微調(diào)整適配 nginx lua 模塊

-- 判斷是否是手機(jī)瀏覽器 function isMobile(userAgent)-- 99% 前三個都能匹配上吧local mobile = {"phone", "android", "mobile", "itouch", "ipod", "symbian", "htc", "palmos", "blackberry", "opera mini", "windows ce", "nokia", "fennec","hiptop", "kindle", "mot", "webos", "samsung", "sonyericsson", "wap", "avantgo", "eudoraweb", "minimo", "netfront", "teleca"}userAgent = string.lower(userAgent)for i, v in ipairs(mobile) doif string.match(userAgent, v) thenreturn trueendendreturn false end-- 根據(jù)id + 瀏覽器類型展示活動頁面 function showPromotionHtml(id, isMobile)local path = "/data/www/mengkang/demo/promotion/"local filenameif isMobile thenpath = path .. "mobile"elsepath = path .. "pc"endfilename = path .. "/" .. id .. ".html"if file_exists(filename) thenlocal file = io.open(filename,"r")io.input(file)ngx.say(io.read("*a"))io.close(file)elsengx.say("file not found : " .. string.gsub(filename, "/data/www/mengkang/demo", ""))end end-- 判斷文件是否存在 function file_exists(path)local file = io.open(path, "rb")if file then file:close() endreturn file ~= nil endlocal id = ngx.var.id local userAgent = ngx.req.get_headers().user_agent showPromotionHtml(id, isMobile(userAgent))

nginx 配置

server {listen 80;server_name mengkang.netlocation ~ /promotion/(\d+){set $id $1;default_type "text/html";content_by_lua_file /data/www/lua/1.lua;} }

nginx 單獨(dú)安裝 lua 模塊也行,使用 openresty 也可以。單獨(dú)安裝參考:https://mengkang.net/994.html

演示地址

https://mengkang.net/promotion/1
https://mengkang.net/promotion/100
切換 user_agent 即可看到,不同的 pc 和 mobile 兩個版本的頁面

和 php 性能對比

nginx 配置

rewrite ^/promotion2/(.*)$ /demo/promotion.php last;

php 代碼

<?php header("Content-type:text/html;charset=utf-8"); header_remove('x-powered-by'); ini_set('display_errors', 'Off');function getId(){$uri = $_SERVER["REQUEST_URI"];$tmp = explode("?",$uri);$uri = $tmp[0];$uri = trim($uri,"/");$tmp = explode("/",$uri);return intval(array_pop($tmp)); }function isMobile() {$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower ( $_SERVER['HTTP_USER_AGENT'] ) : '';if ( preg_match ( "/phone|itouch|ipod|symbian|android|htc_|htc-|palmos|blackberry|opera mini|windows ce|nokia|fennec|hiptop|kindle|mot |mot-|webos\/|samsung|sonyericsson|mobile|pda;|avantgo|eudoraweb|minimo|netfront|nintendo/", $user_agent ) ) {return true;}return false; }$id = getId();$isMobile = isMobile();if ($isMobile){$filename = __DIR__."/promotion/mobile/".$id.".html"; }else{$filename = __DIR__."/promotion/pc/".$id.".html"; }if (file_exists($filename)) {echo file_get_contents($filename); }else{echo "file not found : /promotion/pc/".$id.".html"; }exit;

也就是說訪問
http://mengkang.net/promotion/1

http://mengkang.net/promotion2/1
是一樣的結(jié)果

配置說明

雙核4G
nginx 配置一致
php 版本:7.0.11
php-fpm 配置

pm = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 4 pm.max_spare_servers = 10

php 壓測結(jié)果

ab -n 1000 -c 100 http://mengkang.net/promotion2/1 Requests per second: 3105.21 [#/sec](mean) Time per request: 32.204 [ms](mean)ab -n 4000 -c 400 http://mengkang.net/promotion2/1 Requests per second: 3361.87 [#/sec](mean) Time per request: 118.981 [ms](mean) Complete requests: 4000 Failed requests: 259ab -n 8000 -c 800 http://mengkang.net/promotion2/1 Requests per second: 3358.20 [#/sec](mean) Time per request: 238.223 [ms](mean) Complete requests: 8000 Failed requests: 654ab -n 10000 -c 1000 http://mengkang.net/promotion2/1 Requests per second: 3275.30 [#/sec](mean) Time per request: 305.315 [ms](mean) Complete requests: 10000 Failed requests: 9150

lua 壓測結(jié)果

ab -n 1000 -c 100 http://mengkang.net/promotion/1 Requests per second: 6014.89 [#/sec](mean) Time per request: 16.625 [ms](mean)ab -n 4000 -c 400 http://mengkang.net/promotion/1 Complete requests: 4000 Failed requests: 0 Requests per second: 6190.57 [#/sec](mean) Time per request: 64.614 [ms](mean)ab -n 8000 -c 800 http://mengkang.net/promotion/1 Complete requests: 8000 Failed requests: 0 Requests per second: 7046.66 [#/sec](mean) Time per request: 113.529 [ms](meanab -n 10000 -c 1000 http://mengkang.net/promotion/1 Complete requests: 10000 Failed requests: 0 Requests per second: 5670.38 [#/sec](mean) Time per request: 176.355 [ms](mean)

對比發(fā)現(xiàn)性能提示相當(dāng)可觀。
PHP qps 在 3000左右,nginx_lua qps 在 7000 左右。
php 在 400 個并發(fā)的時候開始出現(xiàn)比較多的失敗請求,吞吐率開始下降。
而 lua 的結(jié)果在 1000 個并發(fā)的時候,失敗的請求數(shù)依舊是0。

總結(jié)

以上是生活随笔為你收集整理的nginx lua 小项目:根据 user_agent 显示不同的页面,附带和 php 性能的对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 外国黄色录像 | 91色九色 | 欧美天堂 | 理论片高清免费理伦片 | 午夜精品国产精品大乳美女 | 巨乳中文字幕 | 欧美专区第二页 | 黄网站视频在线观看 | 日韩啊v| 亚洲精品乱码久久久久久麻豆不卡 | www.欧美| 欧美日韩中文在线 | 乳色吐息免费看 | 久久精品无码av | 9i精品福利一区二区三区 | 午夜精品福利电影 | 波多野结衣视频在线 | 永久av免费| 91久久精品美女高潮 | 美国美女群体交乱 | 特黄三级又爽又粗又大 | 国产熟女一区二区三区四区 | 亚洲国产一二三区 | 视频一二区| 欧美一区二区三区四区五区六区 | av免费片 | 欧美性生活一区二区 | 91大片免费看 | 探花视频在线观看 | 最好看的中文字幕国语电影mv | 王者后宫yin肉h文催眠 | 亚洲成年网站 | 日日噜噜夜夜狠狠久久丁香五月 | 九九自拍 | 日韩美女中文字幕 | 永久在线视频 | 成人免费看高清电影在线观看 | 女生裸体无遮挡 | 波多野结衣电车痴汉 | 爱爱的免费视频 | 日本伦理片在线看 | 日日操夜夜干 | 97超视频在线观看 | 夜夜久久久 | 欧美激情在线看 | 欧美成人免费在线视频 | 在线亚洲区| 精品一区二区三区四区五区六区 | 91色视频在线观看 | 波多野结衣亚洲一区 | 麻豆乱码国产一区二区三区 | 成人深夜视频 | 日韩大片一区 | av黄色大片 | 男女高潮网站 | 日韩成人在线影院 | 中文字幕精品视频在线观看 | 国产三级理论片 | 黄色三级网络 | 中国女人一级片 | 干夜夜 | 天天干,天天操,天天射 | 中文字幕日韩一区二区三区 | 在线观看av一区 | 吊视频一区二区三区 | 邵氏电影《金莲外传2》免费观看 | 久久黄色免费视频 | 精品久久久久久久免费人妻 | 免费的黄色片 | 可以免费观看的毛片 | 国产又粗又猛又爽又黄无遮挡 | 少妇人妻偷人精品视频蜜桃 | 午夜在线观看av | 色咪咪网站 | 91精品福利| 国产精品久久中文字幕 | 99re国产精品 | 日韩精品一区二区三区电影 | 国产永久精品大片wwwapp | 小日子的在线观看免费第8集 | 中文字幕人妻互换av久久 | 中国少妇乱子伦视频播放 | 久久久性| 欧美在线免费看 | 中文字幕av免费在线观看 | 黄色一极视频 | 久久伊人一区 | xxxx69国产 | 波多野结衣久久久久 | av手机天堂网| 天堂网91| 日本a级免费 | 毛片天堂| 黑人巨大猛烈捣出白浆 | 久久wwww | 五月综合色婷婷 | 一级国产视频 | 日韩国产综合 | 狠狠爱成人 |