基于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 相关文章推荐
用javascript实现在小方框中浏览大图的代码
Aug 14 Javascript
Cookie 注入是怎样产生的
Apr 08 Javascript
ext jquery 简单比较
Apr 07 Javascript
validator验证控件使用代码
Nov 23 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
Dec 06 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
Angular 页面跳转时传参问题
Aug 01 Javascript
详解vue.js组件化开发实践
Dec 14 Javascript
vue-router实现组件间的跳转(参数传递)
Nov 07 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
uniapp,微信小程序中使用 MQTT的问题
Jul 11 Javascript
记录一次websocket封装的过程
Nov 23 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
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
layerUI下的绑定事件实例代码
2018/08/17 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
售后主管岗位职责
2013/12/08 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
团队精神的演讲稿
2014/05/14 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
药店采购员岗位职责
2014/09/30 职场文书
公司辞职信模板
2015/05/13 职场文书
行政处罚告知书
2015/07/01 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server