基于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 相关文章推荐
input输入框的自动匹配(原生代码)
Mar 19 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
jquery实现增加删除行的方法
Feb 03 Javascript
第五篇Bootstrap 排版
Jun 21 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
ES6中的数组扩展方法
Aug 26 Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
Dec 08 Javascript
react-navigation之动态修改title的内容
Sep 26 Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 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函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
webpack将js打包后的map文件详解
2018/02/22 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
Python中splitlines()方法的使用简介
2015/05/20 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Python如何实现机器人聊天
2020/09/10 Python
linux面试题参考答案(11)
2016/11/26 面试题
争先创优心得体会
2014/09/12 职场文书
员工培训协议书
2014/09/15 职场文书
大学生党员自我评价
2015/03/04 职场文书
体检通知范文
2015/04/21 职场文书
2015年药房工作总结
2015/04/25 职场文书
红白喜事主持词
2015/07/06 职场文书
入门学习Go的基本语法
2021/07/07 Golang