我們從結(jié)果倒推安裝過程
先看njs安裝成功后的 nginx.conf,了解需要什么東西
查看nginx.conf 所在目錄
mac ~: nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
nginx.conf
//這里必須寫到nginx配置第一行
load_module modules/ngx_http_js_module.so;
http {
//指定我們的js腳本所在目錄
js_path "/etc/nginx/njs/";
js_import hello.js;
server {
listen 8088;
location /hello {
js_content main.hello;
}
}
/etc/nginx/njs/hello.js
function hello(r){
r.return(200,"hello");
}
export default {hello};
瀏覽器訪問 http://127.0.0.1:8088/hello
顯示 hello
可以看到朴则,我們需要ngx_http_js_module.so 這個(gè)文件锨能,而這個(gè)文件需要在本地編譯出來央勒,同時(shí)需要一個(gè)hello.js 腳本泵殴,用于安裝后需求實(shí)現(xiàn)研儒。該文件要放到 js_path 指定的目錄下,如果不設(shè)置js_path尿扯,則默認(rèn)是nginx.conf 所在目錄。
編譯ngx_http_js_module.so
編譯需要 njs源碼 和 nginx源碼(需與本地已安裝nginx服務(wù)版本一致)
下載nginx源碼只是用來編譯so焰雕,不影響本地已經(jīng)安裝的nginx服務(wù)
查看本地nginx版本
mac ~: nginx -v
nginx version: nginx/1.25.4
下載nginx源碼衷笋,并切換版本與本地一致
mac ~: git clone https://github.com/nginx/nginx.git
mac ~: cd nginx
//這個(gè)指令只是合并了讀取本地nginx版本和git checkout 的操作
mac ~: git checkout $( git tag | grep $( nginx -v 2>&1 | awk '{print substr($3, 7, length($3) - 6)}' ))
下載njs源碼
mac ~: git clone https://github.com/nginx/njs.git
將 njs 和nginx 我們下載到了同一個(gè)目錄
然后進(jìn)入剛下在的nginx源碼目錄
mac ~: ls
nginx njs ...
mac ~: cd nginx
mac nginx: eval ./auto/configure --add-dynamic-module=../njs/nginx $( nginx -V 2>&1 | tail -n 1 | awk '{$1=$2=""; print $0}' )
之所以讓下載的nginx源碼和njs在同一目錄下,就是因?yàn)?../njs/nginx 這個(gè)矩屁。因?yàn)楫?dāng)前是在剛下載的nginx源碼目錄內(nèi)辟宗,而要找到njs源碼目錄,則需要一次 cd ..
你也可以把njs下載到其他目錄吝秕,--add-dynamic-module 需要同步
執(zhí)行完會(huì)在剛下載的nginx源碼目錄下生成一個(gè)objs文件
objs
├── addon
│ ├── external
│ └── nginx
├── src
│ ├── core
│ ├── event
│ │ ├── modules
│ │ └── quic
│ ├── http
│ │ ├── modules
│ │ │ └── perl
│ │ ├── v2
│ │ └── v3
│ ├── mail
│ ├── misc
│ ├── os
│ │ ├── unix
│ │ └── win32
│ └── stream
├── Makefile
├── autoconf.err
├── ngx_auto_config.h
├── ngx_auto_headers.h
├── ngx_http_js_module_modules.c
├── ngx_modules.c
└── ngx_stream_js_module_modules.c
最下面那幾個(gè)就是多出來的
然后就是編譯so了
mac ~: cd nginx
mac nginx: make modules
mac nginx: ls objs
Makefile ngx_http_js_module_modules.o
addon ngx_modules.c
autoconf.err ngx_stream_js_module.so
ngx_auto_config.h ngx_stream_js_module_modules.c
ngx_auto_headers.h ngx_stream_js_module_modules.o
ngx_http_js_module.so src
ngx_http_js_module_modules.c
你講看到兩個(gè)so文件泊脐,把他們拷貝到本地現(xiàn)有nginx服務(wù)的根目錄即可
mkdir "$( realpath $( where nginx | head -n 1)/../.. )/modules" && cp objs/*.so $( realpath $( where nginx | head -n 1)/../../modules )
然后nginx.conf 引入剛剛加的so,注意寫到nginx.conf 的第一行
load_module modules/ngx_http_js_module.so;
然后在http下就可以使用js_import了烁峭。
重啟nginx容客,njs安裝成功