基于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 相关文章推荐
AJAX使用了UpdatePanel后无法使用alert弹出脚本
Apr 02 Javascript
纯JS实现的批量图片预览加载功能
Aug 14 Javascript
jquery中ajax学习笔记3
Oct 16 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
IE浏览器中图片onload事件无效的解决方法
Apr 29 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
angularjs实现过滤并替换关键字小功能
Sep 19 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 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制作静态网站的模板框架(二)
2006/10/09 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
javascript 一些用法小结
2009/09/11 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python读写文件操作示例程序
2013/12/02 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
python中的随机函数random的用法示例
2018/01/27 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
大学生两会学习心得体会
2014/03/10 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
授权委托书(完整版)
2014/09/10 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL