搜尋
首頁運維Nginxnginx的nginScript實例分析

nginx的nginScript實例分析

May 20, 2023 am 09:52 AM
nginxnginscript

先簡單說說nginx

nginx [engine x]是全球最受歡迎,也是最優秀的web伺服器、反向代理伺服器。透過第三方公司的統計,目前全球至少有23%的伺服器採用了nginx,當然這個數字還在不斷的擴大中。目前也是國內bat首選,所以這也是為什麼我們第一時間關注到它的原因。

 nginx主要可以做以下幾點:

1、工作在tcp第七層,可以對http協議的所有內容進行分析和處理。
2、支援lua,perl,javascript動態語言
3、支援第三方外掛程式

#再說說nginscript

1、 nginscript是javascript/ecmascript的子集。它實現了大部分的javascript語言的能力,沒有完全遵從ecmascript標準,同時拋棄了javascript比較難懂的部分。

2、 nginscript不是透過v8引擎實現的 。而是透過一個更小、能耗更低、更符合nginx應用場景的小虛擬機器(vm)來實現。可以理解為nginx為其實現了一套自己的詞法解析。

3、 nginscript是跑在nginx的設定檔裡 。例如:nginx.conf檔案裡。所以nginscript可以完成傳統設定檔所能處理的所有事情,同時可以讓設定管理動態化。這也是nginscript出現的最重要的原因。

4、 nginscript 是以nginx插件的方式存在。插件名叫: njs 。和其他nginx插件一樣,我們需要重新編譯nginx來完成安裝。

5、 nginscript目前是早期研發狀態 。大家可以透過郵件  等方式和nginx團隊溝通和提出你的訴求。

如何安裝nginscript

這裡直接按照官方給的步驟就好:

// 1、下載最新nginx包,地址可見:  wget  //2、 解壓縮tar -xzvf nginx-1.9.4.tar.gz //3、透過mercurial取得nginscript模組,這裡如果沒有安裝mercurial,需要先執行yum install mercurial hg clone

//4、編譯nginx,這裡只具體了njs模組,其他需要的模組自己要記得一起裝哦。如果你沒編譯過nginx,有些依賴模組需要yum安裝,請自行搜尋。 cd nginx-1.9.4 ./configure --add-module=../njs/nginx --prefix=/usr/local make make install ok,這就安裝完了,我們可以開始玩啦。

具體如何使用nginscript

nginscript的使用主要是在nginx的設定體系裡增加了2個指令。具體指令分別為:

js_set ,設定配置裡的變數值

js_run ,直接執行設定規則

##1、先看看js_set 在nginx.conf裡怎麼運作的。

http {
 js_set $msg"
   var str = 'hello,imweb';
   // javascript str;
 ";
 server {
  ...
  location /{
   return 200 $msg;
  }
 }
}

結果:

 nginx的nginScript實例分析

上面範例裡,可以看出,我們可以透過js隨意地為nginx設定變數值。而這些變數是可以用在nginx配置的各個地方。如:proxy_pass,limit_req_zone, and sub_filter。這裡相對之前配置已經大大的提高了靈活性。

2、 js_run 的運行規則和場景

js_run 是運行在location指令裡,匹配指定location的路徑就會執行對應的javascript

js_run 是直接透過javascript來產生http回傳的內容
下面舉個具體的例子:

location /imwebteam {
 js_run "
  var res;
  res = $r.response;
  res.status = 200;
  res.send('hello,imweb!');
  res.finish();
 ";
}

這個結果和第一個結果是一樣的。這裡就不贅述。

3、處理兩個指令以外,還有個重要的變數$r

#透過js_set 和js_run 可以對http request請求有完整的控制權,控制的方式就是變數$r 的使用。 $r 裡有什麼可以透過以下簡單範例看到。

http {
 js_set $summary "
 var a, s, h;
 s = 'js summary\n\n';
 s += 'method: ' + $r.method + '\n';
 s += 'http version: ' + $r.httpversion + '\n';
 s += 'host: ' + $r.headers.host + '\n';
 s += 'remote address: ' + $r.remoteaddress + '\n';
 s += 'uri: ' + $r.uri + '\n';
 s += 'headers:\n';
 for (h in $r.headers) {
  s += ' header \"' + h + '\" is \"' + $r.headers[h] + '\"\n';
 }
 s += 'args:\n';
 for (a in $r.args) {
  s += ' arg \"' + a + '\" is \"' + $r.args[a] + '\"\n';
 }
 s;
 ";
 server {
 listen 8000;
 location /imwebteam{
  return 200 $summary;
 }
}

結果如圖:

 nginx的nginScript實例分析

#nginscript目前還存在的問題

#經過上面的介紹,相信大家對nginscript已經有了基本的認知。那我們在看看這個新生兒有哪些問題吧。

首先,偵錯方法弱。目前還是比較原始,透過log的方式來展示,且錯誤日誌的詳細程度很不如人意。

其次,控制力度較弱。目前nginscript的處理力度也僅限於http request的處理和回傳response的層面,還無法做到動態處理nginx請求以外的一些內容,例如動態使用者資料或轉送設定表動態更新等。
最後,整體實現弱。整體結構還是比較簡單,js_run和js_set的運行環境是不太一致的,js_set執行ok的程式碼段在js_run上會出現一些例外。
綜合來說,nginscript還是一個願望和前景很美好的新生兒。需要一定時間打磨和優化。也希望大家多多的提供意見和回饋,甚至是提交自己的外掛。從而使得它有更好的成長。

以上是nginx的nginScript實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
NGINX和Web託管:服務文件和管理流量NGINX和Web託管:服務文件和管理流量May 03, 2025 am 12:14 AM

NGINX可用於服務文件和管理流量。 1)配置NGINX服務靜態文件:定義監聽端口和文件目錄。 2)實現負載均衡和流量管理:使用upstream模塊和緩存策略優化性能。

NGINX與Apache:比較Web服務器技術NGINX與Apache:比較Web服務器技術May 02, 2025 am 12:08 AM

NGINX適合處理高並發和靜態內容,Apache適用於動態內容和復雜URL重寫。 1.NGINX採用事件驅動模型,適合高並發。 2.Apache使用進程或線程模型,適用於動態內容。 3.NGINX配置簡單,Apache配置複雜但更靈活。

nginx和apache:部署和配置nginx和apache:部署和配置May 01, 2025 am 12:08 AM

NGINX和Apache各有優勢,選擇取決於具體需求。 1.NGINX適合高並發,部署簡單,配置示例包括虛擬主機和反向代理。 2.Apache適用於復雜配置,部署同樣簡單,配置示例包括虛擬主機和URL重寫。

NGINX單元的目的:運行Web應用程序NGINX單元的目的:運行Web應用程序Apr 30, 2025 am 12:06 AM

NGINXUnit的目的是簡化Web應用程序的部署和管理。其優勢包括:1)支持多種編程語言,如Python、PHP、Go、Java和Node.js;2)提供動態配置和自動重載功能;3)通過統一的API管理應用生命週期;4)採用異步I/O模型,支持高並發和負載均衡。

NGINX:高性能Web服務器的簡介NGINX:高性能Web服務器的簡介Apr 29, 2025 am 12:02 AM

NGINX始於2002年,由IgorSysoev開發,旨在解決C10k問題。 1.NGINX是高性能Web服務器,基於事件驅動的異步架構,適用於高並發。 2.提供反向代理、負載均衡和緩存等高級功能,提升系統性能和可靠性。 3.優化技巧包括調整worker進程數、啟用Gzip壓縮、使用HTTP/2和安全配置。

Nginx vs. Apache:看他們的架構Nginx vs. Apache:看他們的架構Apr 28, 2025 am 12:13 AM

NGINX和Apache在架構上的主要區別在於:NGINX採用事件驅動、異步非阻塞模型,而Apache使用進程或線程模型。 1)NGINX通過事件循環和I/O多路復用機制高效處理高並發連接,適合靜態內容和反向代理。 2)Apache採用多進程或多線程模型,穩定性高但資源消耗大,適合需要豐富模塊擴展的場景。

NGINX與Apache:檢查優點和缺點NGINX與Apache:檢查優點和缺點Apr 27, 2025 am 12:05 AM

NGINX適合處理高並發和靜態內容,Apache則適用於復雜配置和動態內容。 1.NGINX高效處理並發連接,適合高流量場景,但處理動態內容需額外配置。 2.Apache提供豐富模塊和靈活配置,適合複雜需求,但高並發性能較差。

nginx和apache:了解關鍵差異nginx和apache:了解關鍵差異Apr 26, 2025 am 12:01 AM

NGINX和Apache各有優劣,選擇應基於具體需求。 1.NGINX適合高並發場景,因其異步非阻塞架構。 2.Apache適用於需要復雜配置的低並發場景,因其模塊化設計。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SecLists

SecLists

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境