基于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插件 cluetip 关键词注释
Jan 12 Javascript
jquery多选项卡效果实例代码(附效果图)
Mar 23 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
jQuery实现自定义右键菜单的树状菜单效果
Sep 02 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
vue几个常用跨域处理方式介绍
Feb 07 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
Aug 13 Javascript
详解Vue 如何监听Array的变化
Jun 06 Javascript
vue中移动端调取本地的复制的文本方式
Jul 18 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 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序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
javascript常用方法汇总
2014/12/02 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
js常用DOM方法详解
2017/02/04 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
Python写的服务监控程序实例
2015/01/31 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
Python调用Redis的示例代码
2020/11/24 Python
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
师范生个人推荐信
2013/11/29 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
个人课题方案
2014/05/08 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
专家推荐信怎么写
2015/03/25 职场文书
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers
python+opencv实现目标跟踪过程
2022/06/21 Python