基于javascript处理nginx请求过程详解


Posted in Javascript onJuly 07, 2020

nginx是一个HTTP和反向代理服务器,目前很多网站都在使用nginx作为反向代理服务器。
njs是JavaScript语言的一个子集,它允许扩展nginx的功能,这点跟lua有点类似,不过采用的语言是javascript。

1. 安装nginx

要使用njs,需要安装一个nginx,这里的我使用的环境是Ubuntu18.04.4。

首先从http://nginx.org/en/download.html下载最新的stable version的nginx源码。

a. 解压源码

sudo tar zxvf nginx-1.18.0.tar.gz

b. 安装必要依赖库

sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g-dev
sudo apt-get install openssl libssl-dev
# 如果是Centos系统,则使用下面的命令
# yum install pcre pcre-devel
# yum install zlib zlib-devel
# yum install openssl-devel

c. 拉取njs源码

# 安装mercurial
sudo apt-get install mercurial
# 拉取源码
cd /usr/local/src
hg clone http://hg.nginx.org/njs

d. 配置nginx

cd nginx-1.18.0
sudo ./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--add-module=/usr/local/src/njs/nginx

如果配置成功,可以看到如下信息:

Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx"
nginx configuration file: "/usr/local/nginx/nginx.conf"
nginx pid file: "/usr/local/nginx/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"

e. 编译源码

sudo make
# 如果没有安装make指令,可以通过下面的命令安装
# sudo apt-get install make
f. 安装

sudo make install
# 安装目录为/usr/local/nginx

g. 启动nginx

cd /usr/local/nginx
sudo ./nginx

启动后可以通过访问http://localhost查看nginx是否启动成功,也可以通过logs目录下的日志查看启动日志。
到这里集成njs的nginx就安装完成了,下面可以开始写javascript代码了。

2. 编写js代码

在nginx根目录中创建一下js目录用存放所有的js程序,并编写http.js测试njs模块是否集成完成。

sudo mkdir js
cd js
sudo touch http.js

http.js的源码

function hello(r) {
  r.return(200, "Hello world!");
}
export default {hello};

3. 引入js程序

http.js编写完成后,需要引入到nginx中,修复nginx.conf配置,下面省略了其他相关配置

http {
 # 引入http程序
 js_import js/http.js;

 server {
  location /js {
   default_type 'text/html';
   js_content http.hello;
  }
 }
}

上面指定了/js路径的处理由http.hello程序处理,这样可以通过浏览器访问http://localhost/js来查看http.hello返回的结果。

4. 更多njs指令

关于更多的njs指令及案例,可以在官网中查阅 http://nginx.org/en/docs/njs/index.html。

案例地址:http://nginx.org/en/docs/njs/examples.html。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery第三课 修改元素属性及内容的代码
Mar 14 Javascript
深入理解JavaScript系列(15) 函数(Functions)
Apr 12 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
jQuery功能函数详解
Feb 01 Javascript
JQuery球队选择实例
May 18 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
Vue的生命周期操作示例
Sep 17 Javascript
js获取本日、本周、本月的时间代码
Feb 01 Javascript
vue 动态创建组件的两种方法
Dec 31 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
vue-i18n实现中英文切换的方法
Jul 06 #Javascript
vue 实现动态路由的方法
Jul 06 #Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 #Javascript
解决Nuxt使用axios跨域问题
Jul 06 #Javascript
js实现星星打分效果
Jul 05 #Javascript
jQuery实现简单飞机大战
Jul 05 #jQuery
javascript实现贪吃蛇小练习
Jul 05 #Javascript
You might like
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
php date()日期时间函数详解
2010/05/16 PHP
Views rows style模板重写代码
2011/05/16 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python如何实现DES加密
2020/09/21 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
2014年学生党支部工作总结
2014/12/20 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android