使用 javascript 配置 nginx

使用 javascript 配置 nginx

在上个月的 nginx.conf 2015 大会上, 官方宣布已经支持通过 javascript 代码来配置 nginx,并把这个实现称命名为——nginscript。使用 nginscript,可以很轻易得在 niginx 配置文件中通过 js 语法来实现自定义的服务器配置。

安装

# 下载最新版本的 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 代码来定义一个变量:

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

这些变量可以被其他的 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 变量来获取到请求对象,请求方相关信息都会保存在这个变量上:

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 来获取到响应对象,用于设置响应内容:

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 等对象,都还没有实现。

这便是几乎所有的 nginscript 知识,虽然没有实现完整的 EMCAScript 规范,但是对于配置 nginx 来说,个人感觉也够用了。

时间: 2024-10-25 18:16:08

使用 javascript 配置 nginx的相关文章

配置nginx使用http2同时隐藏版本信息

配置nginx使用http2 一.配置opensslopenssl版本需大于1.0.2版本yum install -y gcc zlib-devel pcre-develwget https://www.openssl.org/source/openssl-1.1.0g.tar.gztar zxvf openssl-1.1.0g.tar.gzcd openssl-1.1.0g./config --prefix=/usr/local/openssl shared zlibmake && ma

使用自签的证书配置nginx的https

1.生成根证书密钥 #] openssl genrsa -des3 -out ca.key 2048 2.自签证书 #] openssl req -new -x509 -days 7305 -key ca.key -out ca.crt 参数说明: req: 生成证书签署请求 -news: 新请求 -key /path/to/keyfile: 指定私钥文件 -out /path/to/somefile: -x509: 生成自签署证书 -days n: 有效天数 3.准备必要文件: #] touc

配置Nginx服务

一,安装之前准备1.nginx依赖: gcc openssl-devel pcre-devel zlib-devel    安装依赖:yum install gcc openssl-devel pcre-devel zlib-devel 2.创建用户和用户组.为了方便nginx运行而不影响linux安全(不是必须要做的)    创建组:groupadd -r nginx    创建用户:useradd -r -g nginx  -M nginx          -M 表示不创建用户的家目录.

在linux下配置nginx+java+php的环境

Apache对Java的支持很灵活,它们的结合度也很高,例如Apache+Tomcat和Apache+resin等都可以实现对Java应用 的支持.Apache一般采用一个内置模块来和Java应用服务器打交道.与Apache相比,Nginx在配合Java应用服务器方面,耦合度很低,它 只能通过自身的反向代理功能来实现与Java应用服务器的支持.但这恰恰是Nginx的一个优点,耦合度的降低,可以使Nginx与Java服务器的相互 影响降到最低. 接下来通过Nginx+Tomcat的实例来讲解Ngi

烂泥:Windows下安装与配置Nginx web服务器

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章,我们使用nginx都是在linux环境下,今天由于工作的需要.需要在windows环境也使用nginx搭建web服务器. 下面记录下有关nginx下的搭建与配置. 注意本次实验使用的windows server 2003 64bit,而且还是在虚拟机中.IP地址为192.168.1.221 首先去官网下载 nginx最新的的Windows版本,如下: http://nginx.org/en/download.html 下载到软件包后,解

三、cent OS安装配置nginx

简介Tengine是淘宝发起的web服务器项目,简单的讲就是对nginx进行了二次开发并提供了更丰富的功能,官网地址:http://tengine.taobao.org/ 下载nginx这里使用淘宝二次开发的tengine下载地址:http://tengine.taobao.org/download.html 将文件上传到服务器:scp -P 22 本地文件地址 用户名@IP地址:服务器存放地址 解压并置入到新目录:/laycloud/nginxtar -zxvf tengine-2.2.0.t

windows下配置nginx+php环境

windows下配置nginx+php环境 刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是“引擎x”,一般引“擎代”表了性能,而“x”大多出现是表示“xtras(额外的效果)”,那么整个词的意思就是类似“极致效果”,“额外性能”.当然这里不是要来唠嗑,以上是题外话. nginx相较于我们熟悉的apache.IIS的优势,就我浅入浅出的了解,在于“反向代理”和“负载均衡”.因此考虑到能够为Web服务器节省资源,它可以代替apache来提供Web服务.那么上正题了,ngin

macos10.9 配置nginx,php-fpm

参考文献: http://dhq.me/mac-apt-get-homebrew http://www.xiaoche.me/blog/2012/02/01/homebrew-install/ http://dhq.me/mac-install-nginx-mysql-php-fpm http://www.cnblogs.com/zhongyuan/p/3313106.html 1.安装homebrew ruby -e "$(curl -fsSL https://raw.github.com/H

【Nginx】配置Nginx的负载均衡

阅读目录 参考的优秀文章 在本机运行2个Tomcat Nginx的负载均衡配置 参考的优秀文章 tomcat配置文件server.xml详解 AJP协议总结与分析 Using nginx as HTTP load balancer 在本机运行2个Tomcat 现需要运行两个Tomcat,监听不同端口,让Nginx作负载均衡跳转过来.Tomcat版本:apache-tomcat-7.0.69-windows-x64.zip 要在一台机器运行两个Tomcat,要解决端口的冲突,我们只需要D:\gre