基于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的一个图片hover的插件
Apr 24 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
javascript中不等于的代码是什么怎么写
Dec 29 Javascript
jQuery检测某个元素是否存在代码分享
Jul 09 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
vue基础之v-bind属性、class和style用法分析
Mar 11 Javascript
Vue实现PC端靠边悬浮球的代码
May 09 Javascript
vue中data里面的数据相互使用方式
Jun 05 Vue.js
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解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
php工具型代码之印章抠图
2018/07/18 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
js中style.display=""无效的解决方法
2014/10/30 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
Python手机号码归属地查询代码
2016/05/04 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Django中的静态文件管理过程解析
2019/08/01 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
文秘专业自荐信
2013/10/14 职场文书
班队活动设计方案
2014/01/30 职场文书
物流业务员岗位职责
2014/02/08 职场文书
社区先进事迹材料
2014/05/19 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
新手上路标语
2014/06/20 职场文书
生物科学专业自荐书
2014/06/20 职场文书
亮剑精神观后感
2015/06/05 职场文书
Python 中random 库的详细使用
2021/06/03 Python