首页 > 其他分享 >angie njs 模块试用

angie njs 模块试用

时间:2023-11-03 16:47:09浏览次数:45  
标签:load http modules module njs so 模块 angie

angie njs 是一个类似lua 的模块,提供了基于js 进行nginx 功能开发的能力(但是目前没有nginx lua 模块强大)
以下是一个简单试用

环境准备

基于了以前测试nginx lua 模块的基础镜像

  • http.js
 
function foo(r) {
    r.log("hello from foo() handler");
    return "foo";
}
 
function summary(r) {
    var a, s, h;
 
    s = "JS summary\n\n";
 
    s += "Method: " + r.method + "\n";
    s += "HTTP version: " + r.httpVersion + "\n";
    s += "Host: " + r.headersIn.host + "\n";
    s += "Remote Address: " + r.remoteAddress + "\n";
    s += "URI: " + r.uri + "\n";
 
    s += "Headers:\n";
    for (h in r.headersIn) {
        s += "  header '" + h + "' is '" + r.headersIn[h] + "'\n";
    }
 
    s += "Args:\n";
    for (a in r.args) {
        s += "  arg '" + a + "' is '" + r.args[a] + "'\n";
    }
 
    return s;
}
 
function baz(r) {
    r.status = 200;
    r.headersOut.foo = 1234;
    r.headersOut['Content-Type'] = "text/plain; charset=utf-8";
    r.headersOut['Content-Length'] = 15;
    r.sendHeader();
    r.send("nginx");
    r.send("java");
    r.send("script");
 
    r.finish();
}
 
function hello(r) {
    r.return(200, "Hello world!");
}
 
// since 0.7.0
async function hash(r) {
    let hash = await crypto.subtle.digest('SHA-512', r.headersIn.host);
    r.setReturnValue(Buffer.from(hash).toString('hex'));
}
 
export default {foo, summary, baz, hello, hash};
  • angie.conf
# package: angie-module-auth-jwt
#load_module modules/ngx_http_auth_jwt_module.so;
 
# package: angie-module-auth-spnego
#load_module modules/ngx_http_auth_spnego_module.so;
 
# package: angie-module-brotli
#load_module modules/ngx_http_brotli_filter_module.so;
#load_module modules/ngx_http_brotli_static_module.so;
 
# package: angie-module-cache-purge
#load_module modules/ngx_http_cache_purge_module.so;
 
# package: angie-module-dav-ext
#load_module modules/ngx_http_dav_ext_module.so;
 
# package: angie-module-echo
#load_module modules/ngx_http_echo_module.so;
 
# package: angie-module-enhanced-memcached
#load_module modules/ngx_http_enhanced_memcached_module.so;
 
# package: angie-module-eval
#load_module modules/ngx_http_eval_module.so;
 
# package: angie-module-geoip2
#load_module modules/ngx_http_geoip2_module.so;
#load_module modules/ngx_stream_geoip2_module.so;
 
# package: angie-module-headers-more
#load_module modules/ngx_http_headers_more_filter_module.so;
 
# package: angie-module-image-filter
#load_module modules/ngx_http_image_filter_module.so;
 
# package: angie-module-keyval
#load_module modules/ngx_http_keyval_module.so;
 
# package: angie-module-lua
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_lua_module.so;
#load_module modules/ngx_stream_lua_module.so;
 
# package: angie-module-ndk
 
# package: angie-module-njs
load_module modules/ngx_http_js_module.so;
load_module modules/ngx_stream_js_module.so;
 
# package: angie-module-opentracing
#load_module modules/ngx_http_opentracing_module.so;
 
# package: angie-module-perl
#load_module modules/ngx_http_perl_module.so;
 
# package: angie-module-redis2
#load_module modules/ngx_http_redis2_module.so;
 
# package: angie-module-rtmp
#load_module modules/ngx_rtmp_module.so;
 
# package: angie-module-set-misc
#load_module modules/ngx_http_set_misc_module.so;
 
# package: angie-module-subs
#load_module modules/ngx_http_subs_filter_module.so;
 
# package: angie-module-upload
#load_module modules/ngx_http_upload_module.so;
 
# package: angie-module-vod
#load_module modules/ngx_http_vod_module.so;
 
# package: angie-module-xslt
#load_module modules/ngx_http_xslt_filter_module.so;
 
user  angie;
worker_processes  auto;
worker_rlimit_nofile 65536;
 
error_log  /var/log/angie/error.log notice;
 
events {
    worker_connections  65536;
}
   
http {
    include       /etc/angie/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    log_format extended '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" rt="$request_time" '
                        '"$http_user_agent" "$http_x_forwarded_for" '
                        'h="$host" sn="$server_name" ru="$request_uri" u="$uri" '
                        'ucs="$upstream_cache_status" ua="$upstream_addr" us="$upstream_status" '
                        'uct="$upstream_connect_time" urt="$upstream_response_time"';
 
    access_log  /var/log/angie/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
    resolver 114.114.114.114;
    #gzip  on;
    # 此处配置js 模块
    js_import /opt/js/http.js;
    js_set $foo     http.foo;
    js_set $summary http.summary;
    js_set $hash    http.hash;
    include /etc/angie/http.d/*.conf;
}
 
#stream {
#    include /etc/angie/stream.d/*.conf;
#}
  • 站点集成
    default.conf
 
server {
    listen       80;
    server_name  localhost;
 
    location / {
        root   /usr/share/angie/html;
        index  index.html index.htm;
    }
 
    location /status/ {
        api     /status/;
        allow   127.0.0.1;
        deny    all;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/angie/html;
    }
    location =  /baz {
        default_type text/html;
        add_header X-Foo $foo;
        js_content http.baz;
    }
 
    location = /summary {
        default_type text/html;
        return 200 $summary;
    }
    location = /hello {
        default_type text/html;
        js_content http.hello;
    }
}
  • 效果

说明

njs 模块目前提供的能力还是比较方便的,同时我们也可以试用typescript 进行模块的开发,这样也就具有了强类型的能力,还是很不错的

参考资料

https://angie.software/en/install/#install-docker
https://nginx.org/en/docs/njs/index.html
https://github.com/rongfengliang/angie_njs_lua_leaning

标签:load,http,modules,module,njs,so,模块,angie
From: https://www.cnblogs.com/rongfengliang/p/17807891.html

相关文章

  • angie nginx_lua 模块使用
    angie包含了不少社区模块,docker镜像更加方便,都已经安装了,以下是一个测试lua模式的使用因为默认官方构建的是一个动态扩展模块,对于三方lua模块安装不是很方便,我参考了openresty对于luarocks的支持,这样我们自己安装三方lua模块就比较方便的构建支持luarocks的dcoker镜......
  • 爬虫之requests模块
    一、爬虫介绍1、2、二、requests模块1、2、三、携带请求参数1、2、四、url编码和解码1、2、五、携带请求头1、2、六、发送post请求1、2、七、携带cookie1、2、八、响应对象1、2、九、高级用法1、2、......
  • 振弦采集读数模块如何连接设备
    振弦采集读数模块如何连接设备振弦采集读数模块是一种可以用来监测物体振动情况的设备,可以应用在机器运转状态监测、结构健康监测、地震测量等领域。它主要通过传感器对物体的振动进行监测,并将监测到的数据输出到计算机或其他设备上,以便进行分析和判断。 要使用振弦采集读数......
  • jar包的精细化运营,Java模块化简介 | 京东云技术团队
    图:模块化手机概念一、什么是Java模块化Java模块化(module)是Java9及以后版本引入的新特性。官方对模块的定义为:一个被命名的,代码和数据的自描述集合。(themodule,whichisanamed,self-describingcollectionofcodeanddata)。早在Java7的时候就被提出,但由于其复杂性,不断跳票,直......
  • angie rocky docker 镜像问题
    angierockydocker在构建的时候似乎有一些问题,启动的时候会有问题异常信息angie:[emerg]open()"/run/angie/angie.pid"failed(2:Nosuchfileordirectory)解决方法自己构建一个镜像,对于缺少的文件夹进行创建FROMdocker.angie.software......
  • Ansible操作MySQL常用的几个模块
    1. mysql_user模块mysql_user模块用来添加,删除用户以及设置用户权限创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。-name:创建MySQL数据库用户--user_testmysql_user:#-----登陆数据库login_host:"localhost"......
  • pyttsx3模块
    1、介绍pyttsx3模块是python的一个第三方模块,作用是进行语音合成。无需请求api,本地合成,可以不受次数和字数限制技术相对成熟,应用广泛,使用方便2、pyttsx3.speak函数importpyttsx3pyttsx3.speak('你指尖跃动的电光,是我此生不灭的信仰')这是该模块最简应用,调用speak函数时......
  • angie vod_module 模块的问题
    上次我简单说过angie官方构建的nginx-vod-module有一些问题,经常测试实际上问题还是不小的主要问题声音处理会有问题同时缩略图似乎也有问题解决方法应该自己构建nginx-vod-module,同时编译为动态模块(包含debug最好)说明实际上通过日志我们也看出了不少警告信息,十实际上......
  • angie vod_module 试用
    因为angie已经内置了不少方便的模块(包含了vod模块),vod对于视频的处理是一个很常用的模块(m3u8播放)主要进行下测试环境准备基于docker-compose部署,核心是配置vod配置主要包含了核心配置以及特定协议支持配置angie为了与nginx不一样,使用了不同的名称angie.conf......
  • angie docker 镜像试用
    主要是试用下官方的docker镜像环境准备docker-composeversion:"3"services:angie:image:docker.angie.software/angie:1.3.1-rockyports:-"80:80"-"443:443"启动&效果启动do......