• Nginx Javascript là một plugin được sử dụng giống như lua trên nginx
  • Nginx Javascript là đươc do chính nginx team phát triển

  • Mô hình chạy sẽ là như sau:

                    ---------------------                                   --------------
    CLient --------> | mqtt-authen-plugin | --proxy to mqtt-authen server--> | nginx:8010 | --proxy --> django authen API|
                    ---------------------                                   --------------
    
  • Repo cho nginx javascript

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
  • Cách cài đặt và cấu hình (đã cài đặt nginx rồi nha):

  • yum install nginx-module-njs

  • Copy file cấu hình mqtt-auth.conf với nội dung sau vào /etc/nginx/conf.d/

    proxy_cache_path /mnt/ssd/nginx levels=1:2 keys_zone=mqtt:10m inactive=24h max_size=50g;
    
    js_include conf.d/hello_world.js;
    
    log_format alochym '[$time_local] [Cache:$upstream_cache_status] $request_uri $request_body';
    
    server {
        listen       127.0.0.1:8010 default_server;
        server_name  _;
    
        access_log  /var/log/nginx/mqtt-access.log alochym;
        error_log /var/log/nginx/mqtt-error.log;
    
        location /queue/superuser {
            js_content tosuperuser;
        }
        location /queue/acl {
            proxy_cache_key $request_uri$request_body;
            proxy_ignore_headers Cache-Control Expires;
            proxy_cache mqtt;
            proxy_cache_methods POST;
            proxy_cache_valid 200 403 24h;
            proxy_pass http://127.0.0.1:8002/queue/acl;
        }
        location /queue/auth {
            proxy_cache_key $request_uri$request_body;
            proxy_ignore_headers Cache-Control Expires;
            proxy_cache mqtt;
            proxy_cache_methods POST;
            proxy_cache_valid 200 403 24h;
            proxy_pass http://127.0.0.1:8002/queue/auth;
        }
    }
    
  • Create hello_world.js với nội dung sau vào /etc/nginx/conf.d/

    function tosuperuser(r) {
        //r.error(r.requestBody)
        var m_username = JSON.parse(r.requestBody)['username'];
    
        var regex = RegExp('Alochym*');
        //r.error("user comming to: " + m_username);
        if (regex.test(m_username)) {
            //r.error("sys user comming to: " + m_username);
            r.return(200,"OK");
        }else{
            //r.error("user binh thuong vao superuser: " + m_username);
            r.return(403,"denied");
        }
    }
    
  • systemctl restart nginx