基于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 相关文章推荐
如何做到打开一个页面,过几分钟自动转到另一页面
Apr 20 Javascript
15 个 JavaScript Web UI 库
May 19 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
jquery监听div内容的变化具体实现思路
Nov 04 Javascript
jQuery 无刷新分页实例代码
Nov 12 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
Javascript 5种方法实现过滤删除前后所有空格
Jun 22 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
Jul 22 Javascript
Vue2.0 实现移动端图片上传功能
May 30 Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 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实现多进程并行执行脚本
2013/06/18 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
Python内置模块turtle绘图详解
2017/12/09 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
python中setuptools的作用是什么
2020/06/19 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
numpy实现RNN原理实现
2021/03/02 Python
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
店长助理岗位职责
2013/12/13 职场文书
实习评语
2013/12/16 职场文书
指导教师评语
2014/04/26 职场文书
趣味运动会广播稿
2014/09/13 职场文书
python中%格式表达式实例用法
2021/06/18 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫