nginx est un serveur HTTP et proxy inverse largement adopté par de nombreux sites web. njs, un sous-ensemble du langage JavaScript, permet d'étendre les fonctionnalités d'nginx, de manière similaire à lua mais en utilisent JavaScript comme langage d'implémentatino.
1. Installation d'nginx
En tant que module pour nginx, njs doit être compilé avec nginx. Nous utiliserons l'environnement Ubuntu 18.04.4 pour cette démonstration. Commencez par télécharger le code source de la version stable la plus récente depuis http://nginx.org/en/download.html.
a. Extraction des sources
sudo tar zxvf nginx-1.18.0.tar.gz
b. Installation des dépendances requises
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g-dev
sudo apt-get install openssl libssl-dev
# Pour les systèmes CentOS, utilisez plutôt :
# yum install pcre pcre-devel
# yum install zlib zlib-devel
# yum install openssl-devel
c. Récupérasion des sources njs
# Installation de mercurial
sudo apt-get install mercurial
# Clonage du dépôt
cd /usr/local/src
hg clone http://hg.nginx.org/njs
d. Configuration 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
Si la configuration réussit, vous verrez un résumé similaire à :
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. Compilation du code source
sudo make
# Si make n'est pas installé :
# sudo apt-get install make
f. Installation
sudo make install
# L'installation se fait dans /usr/local/nginx
g. Démarrage d'nginx
cd /usr/local/nginx
sudo ./nginx
Après le démarrage, vous pouvez vérifier si nginx fonctionne en visitant http://localhost. Les journaux dans le répertoire logs confirmeront le succès du démarrage. À ce stade, nginx avec njs est installé et prêt à l'emploi.
2. Rédaction de code JavaScript
Créez un répertoire js à la racine d'nginx pour stocker tous vos scripts JavaScript, puis créez un fichier test.js pour valider l'intégration du module njs.
sudo mkdir js
cd js
sudo touch test.js
Voici un exemple de code pour test.js qui affiche simplement une chaîne de caractères :
function salutation(requete) {
requete.envoyer(200, "Bonjour le monde !");
}
export default {salutation};
3. Intégration des scripts JavaScript
Une fois test.js créé, il faut l'intégrer à nginx. Modifiez le fichier nginx.conf comme suit (les autres configurations sont omises pour concision) :
http {
# Importation du script JavaScript
js_import js/test.js;
server {
location /demo {
default_type 'text/html';
js_content test.salutation;
}
}
}
Cette configuration indique que les requêtes vers /demo seront traitées par la fonction salutation du module test. Vous pouvez accéder au résultat en visitant http://localhost/demo dans votre navigateur.
4. Autres directives njs
Pour explorer davantage de directives et d'exemples njs, consultez la documentation officielle à http://nginx.org/en/docs/njs/index.html. Les exemples pratiques sont disponibles à http://nginx.org/en/docs/njs/examples.html.
Actuellement, njs ne bénéficie pas de l'écosystème de bibliothèques tierces aussi développé que nginx + lua, mais en tant qu'officiel soutenu par l'équipe nginx, son potentiel d'évolution est prometteur.