使用 javascript 配置 nginx

使用 javascript 配置 nginx

在上個月的 nginx.conf 2015 大會上, 官方宣佈已經支持經過 javascript 代碼來配置 nginx,並把這個實現稱命名爲——nginscript。使用 nginscript,能夠很輕易得在 niginx 配置文件中經過 js 語法來實現自定義的服務器配置。javascript

安裝

# 下載最新版本的 nginx 並解壓 curl -O http://nginx.org/download/nginx-1.9.5.tar.gz tar -xzvf nginx-1.9.5.tar.gz # 下載 nginscript 模塊並解壓 curl -O http://hg.nginx.org/njs/archive/tip.tar.gz tar -xzvf tip.tar.gz # 編譯並安裝 nginx $ cd nginx-1.9.5 $ ./configure --add-module=剛纔解壓的nginscript目錄 $ make $ make install 

在 nignx.conf 中使用 nginscript

定義變量

使用 js_set 指令能夠經過 javascript 代碼來定義一個變量:java

js_set $msg " var m = 'Hello '; m += 'world!'; m; "; 

這些變量能夠被其餘的 nginx 指令使用:nginx

location /hello {
    add_header Content-Type text/plain;
    return 200 $msg; } 

執行 javascript 代碼片斷

使用 js_run 指令能夠執行指定的 javacript 代碼:服務器

location /hello {
    js_run "
        var res; res = $r.response; res.contentType = 'text/plain'; res.status = 200; res.sendHeader(); res.send( 'Hello, world!' ); res.finish(); "; } 

請求對象

在 javascript 代碼中能夠經過 $r 變量來獲取到請求對象,請求方相關信息都會保存在這個變量上:curl

js_set $summary " var a, s, h; s = 'Request 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; "; 

response 響應對象

在 javascript 代碼中能夠經過 $r.response 來獲取到響應對象,用於設置響應內容:url

js_run " var res = $r.response; res.contentType = 'text/plain'; res.status = 200; res.sendHeader(); res.send( 'Hello, world!' ); res.finish(); "; 

nginscript 與 javascript 的區別

nginscript 不是完整的 javascript,它只是是實現了一個 ECMAScript 的一個子集, 爲了追求效率, 許多 javascript 的內置對象在 nginscript 中並無實現。我嘗試使用了一下 Date、JSON 等對象,都尚未實現。spa

這即是幾乎全部的 nginscript 知識,雖然沒有實現完整的 EMCAScript 規範,可是對於配置 nginx 來講,我的感受也夠用了。code

相關文章
相關標籤/搜索