基于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 相关文章推荐
使用javascript访问XML数据的实例
Dec 27 Javascript
解决ueditor jquery javascript 取值问题
Dec 30 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
Feb 10 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
js提取中文拼音首字母的封装工具类
Mar 12 Javascript
微信小程序之自定义组件的实现代码(附源码)
Aug 02 Javascript
微信公众号H5支付接口调用方法
Jan 10 Javascript
vue实现移动端图片上传功能
Dec 23 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 Javascript
vue实现在线学生录入系统
May 30 Javascript
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设置进度条的方法
2015/07/08 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
js实现简单掷骰子小游戏
2019/10/24 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
django解决跨域请求的问题
2018/11/11 Python
python异步存储数据详解
2019/03/19 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
运行Python编写的程序方法实例
2020/10/21 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
学党史心得体会
2014/09/05 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
Redis可视化客户端小结
2021/06/10 Redis