在上个月的 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 配置 nginx"请求对象">请求对象

在 javascript 代码中可以通过 $r 变量来获取到请求对象,请求方相关信息都会保存在这个变量上:

js_set $summary "
var a, s, h; s = 'Request summarynn'; 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 来说,个人感觉也够用了。

使用 javascript 配置 nginx的更多相关文章

  1. CentOS7快速配置nginx node mysql8.0

    目录: (一)基础准备 (二)安装node (三)安装nginx (四)安装mySql8.0 (五)整体配置 (六)安装PM2守护进程 (一)基础准备1.1 概述 服务器操作系统为 centos7.4 ...

  2. windows配置nginx实现负载均衡集群 -请求分流

    windows配置nginx实现负载均衡集群 一.windows上安装nginx 1.下载nginx的windows版本http://nginx.org/en/download.html 2.把压缩文 ...

  3. Cubieboard A10 安装Nand系统,配置nginx,php,mysql,samba详细教程

    安装前置条件 1.下载win32diskimager-v0.7-binary.zip 2.下载debian_wheezy_armhf_v1_mele.zip 3.下载cubie_nand_uboot_ ...

  4. centos7系统下安装php-fpm并配置nginx支持并开启网站gzip压缩

    注:此处不介绍nginx的安装.以下教程默认已安装nginx. 1. yum install -y php-fpm yum install php-pdo yum install php-mysql ...

  5. 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试

    也不说废话,直接干 上一篇 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 中安装了 FastDFS 后,并配置启动了 Tracker 和 Storage 服务,已经可以上传文件 ...

  6. 如何正确配置Nginx+PHP

    对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴.听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出 ...

  7. [原创]Centos7 从零配置Nginx+PHP+MySql

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  8. 在ubuntu上面配置nginx实现反向代理和负载均衡

    上一篇文章(http://www.cnblogs.com/chenxizhang/p/4684260.html),我做了一个实验,就是利用Visual Studio,基于Nancy框架,开发了一个自托 ...

  9. windows7配置Nginx+php+mysql教程

    windows7配置Nginx+php+mysql教程 最近在学习php,想把自己的学习经历记录下来,并写一些经验,仅供参考交流.此文适合那些刚刚接触php,想要学习并想要自己搭建Nginx+php+ ...

随机推荐

  1. jquery.timepicker.js - 最常用的日期JS控件

    客户提了个需求,输入日期,想也不用想,立刻翻查Jquery,发现是有timepicker.js这个控件,马上就用. 1. 导入库 <script src="https://cdnjs. ...

  2. python图像处理:一福变五福

    快过年了,各种互联网产品都出来撒红包.某宝一年一度的“集五福活动”更是成为每年的必备活动之一. 虽然到最后每人大概也就分个两块钱,但作为一个全民话题,大多数人还是愿意凑凑热闹. 毕竟对于如今生活在大城 ...

  3. matlab2016b

    http://www.cnblogs.com/CQBZOIer-zyy/p/5933954.html

  4. python-jenkins 操作

    Python-Jenkins Doc:http://python-jenkins.readthedocs.io/en/latest/index.html 实例代码: import jenkins je ...

  5. We don't wanna work!

    We don't wanna work! [JAG Asia 2016] 两个set,一个代表工作的,一个代表不工作的 其实是一个很简单的模拟,但是我竟然排序之前标号.... 检查代码的时候要从头开始 ...

  6. linux下用firefox打开csdn故障解决办法

    问题:浏览器打开csdn时博客浏览不全,没有了排版 解决办法: 1.下载一个安装包 命令:epel-release-7-11.noarch.rpm: epel-release-7-11.noarch ...

  7. druid+mybaits简单集成

    在前面的文章中,我们对springboot开发中一些常用的框架进行了集成,但是发现还是存在一些问题,比如druid还需要比较长的固有配置,实际上druid官方是提供了相关的starters包的,内部采 ...

  8. [LC] 93. Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  9. zcat|subprocess.check_all|subprocess.Popen|gzip|readline()

    #!/usr/bin/python from subprocess import check_call import subprocess import gzip ''' $ zcat 160121_ ...

  10. 代码审计中的SQL注入

    0x00 背景 SQL注入是一种常见Web漏洞,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.本文以代码审计的形式研 ...