首页 > nginx, 源码分析 > nginx+njs安装和初步使用

nginx+njs安装和初步使用

2020年3月8日 发表评论 阅读评论 945 次浏览

一,测试环境
$ cat /etc/issue
Ubuntu 18.04.3 LTS \n \l
$ uname -a
Linux lenky-virtual-machine 5.0.0-27-generic #28~18.04.1-Ubuntu SMP Thu Aug 22 03:00:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

二,下载源码
1,下载nginx:
$ wget http://nginx.org/download/nginx-1.17.9.tar.gz
2,下载njs:
$ sudo apt install mercurial
$ hg clone http://hg.nginx.org/njs

三,编译安装
1,准备依赖包
$ sudo apt-get install build-essential
$ sudo apt-get install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev

2,三板斧编译
$ sudo mkdir /opt/nginx
$ tar xf nginx-1.17.9.tar.gz
$ cd nginx-1.17.9/
$ sudo ./configure –prefix=/opt/nginx/
执行上面一步不报错,nginx就可以编译了。不过下面加上njs的支持:
$ ls /home/lenky/nginx-dir/njs
$ sudo ./configure –prefix=/opt/nginx/ –add-module=/home/lenky/nginx-dir/njs/nginx
$ sudo make
$ sudo make install

四,运行启动
$ cd /opt/nginx/
$ sudo ./sbin/nginx -c ./conf/nginx.conf
$ cd /tmp/
$ wget 127.0.0.1
$ cat index.html
看到Welcome to nginx!就成功了

五,小试njs
$ cd /opt/nginx/conf
$ sudo cp nginx.conf nginx-njs.conf
$ sudo vi nginx-njs.conf
主要是在http的最上加入如下内容:

...
http {

    js_include hello_world.js;

    server {
        listen 8000;
        location / {
            js_content hello;
        }
    }
...

$ sudo vi hello_world.js
内容如下:

$ cat hello_world.js
function hello(r) {
    r.return(200, "Hello world!");
}

重启nginx:
$ sudo killall nginx
$ cd /opt/nginx
$ sudo ./sbin/nginx -c conf/nginx-njs.conf
$ cd /tmp
$ wget 127.0.0.1:8000
$ cat index.html.1
Hello world!

修改hello_world.js的话,需要重新加载配置:
$ cat hello_world.js

function hello(r) {
    r.return(200, "Hello njs!");
}

$ sudo /opt/nginx/sbin/nginx -s reload
$ wget -q -O – 127.0.0.1:8000
Hello njs!

六,njs的重要数据

njs代码最重要的就是那个参数r了,所以看一下r到底有哪些属性?

$ cd /opt/nginx/conf
$ sudo vi hello_world.js
$ sudo cat hello_world.js

function print_r(obj) {
    var str="";
    for (var item in obj){
        str +=item+":\t"+ typeof obj[item]+"\n";
    }
    return str;
}

function hello(r) {
    r.return(200, print_r(r));
}
$ sudo /opt/nginx/sbin/nginx -s reload
$ wget -q -O - 127.0.0.1:8000
variables:      external
subrequest:     function
status: number
log:    function
args:   external
requestBody:    undefined
responseBody:   string
sendHeader:     function
finish: function
httpVersion:    string
remoteAddress:  string
headersOut:     external
internalRedirect:       function
parent: undefined
send:   function
method: string
uri:    string
error:  function
headersIn:      external
warn:   function
return: function

有了这些属性字段,就可以做很多业务逻辑处理了
当然njs还提供有对应的全局变量和公共库,具体见这里:http://nginx.org/en/docs/njs/reference.html
目前njs还不太完善,性能也有待考量,但也是一个可选方案。另一个方案当然是openresty了…

转载请保留地址:http://www.lenky.info/archives/2020/03/2710http://lenky.info/?p=2710


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

分类: nginx, 源码分析 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.