基于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 相关文章推荐
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 Javascript
PageSwitch插件实现100种不同图片切换效果
Jul 28 Javascript
详解Document.Cookie
Dec 25 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
JS事件添加和移出的兼容写法示例
Jun 20 Javascript
jQuery Validate插件实现表单验证
Aug 19 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
JS实现小球的弹性碰撞效果
Nov 11 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 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
Syphon 使用方法
2021/03/03 冲泡冲煮
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
python线程池的实现实例
2013/11/18 Python
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python快速排序算法实例分析
2017/11/29 Python
PyCharm代码格式调整方法
2018/05/23 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
新法人代表任命书
2014/06/06 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2016春节家属慰问信
2015/03/25 职场文书
小学生反邪教心得体会
2016/01/15 职场文书