introduction
OpenResty est un serveur Web qui étend Nginx en le regroupant avec de nombreux modules Nginx et bibliothèques Lua utiles. OpenResty excelle dans la mise à l’échelle d’applications et de services Web. Par exemple, un module inclus vous permet d’écrire du code Lua qui s’exécutera directement dans un serveur Nginx, permettant ainsi des applications hautes performances.
Dans ce guide, vous allez configurer OpenResty à partir des sources; les packages pré-construits pour certaines distributions peuvent être obsolètes. Vous explorerez également quelques exemples d’applications simples avec les fonctionnalités uniques d’OpenResty.
Conditions préalables
Pour suivre ce guide, vous aurez besoin de:
-
Un serveur Ubuntu 16.04 configuré en suivant le tutoriel Initial Initial Server avec Ubuntu 16.04, y compris un sudo non -root utilisateur et un pare-feu.
Notez que Nginx ne devrait * pas * être installé. Il est inclus dans OpenResty et son installation à l’avance sera conflictuel.
Étape 1 - Téléchargement du code source et des dépendances d’OpenResty
Dans cette section, nous installerons OpenResty à partir des sources.
Tout d’abord, recherchez la dernière version du code source OpenResty à partir de la page Download sur le site Web OpenResty. Téléchargez l’archive, en veillant à remplacer le numéro de version par la dernière version, si celle-ci a été modifiée.
wget https://openresty.org/download/openresty-.tar.gz
Téléchargez également le fichier de clé PGP pour que nous puissions en vérifier le contenu.
wget https://openresty.org/download/openresty-.tar.gz.asc
Ensuite, nous devons ajouter la clé publique de l’auteur comme indiqué sur la page de téléchargement. Au moment de la rédaction, il s’agit de la clé publique + A0E98066 +
. Cependant, vérifiez si cela a changé. il est répertorié sur la même page de téléchargements.
gpg --keyserver pgpkeys.mit.edu --recv-key
Vous devriez voir la sortie suivante (avec votre nom d’utilisateur à la place de * sammy *):
Outputgpg: directory `/home/sammy/.gnupg' created
gpg: new configuration file `/home/sammy/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/sammy/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/home/sammy/.gnupg/secring.gpg' created
gpg: keyring `/home/sammy/.gnupg/pubring.gpg' created
gpg: requesting key A0E98066 from hkp server pgpkeys.mit.edu
gpg: /home/sammy/.gnupg/trustdb.gpg: trustdb created
gpg: key A0E98066: public key "Yichun Zhang (agentzh) <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Vérifiez que le nom figurant sur la clé publique (dans ce cas, «Yichun Zhang») correspond au nom indiqué sur le site Web OpenResty.
Maintenant, vérifiez si le fichier de signature correspond au fichier + .tar.gz
téléchargé.
gpg openresty-.tar.gz.asc
Vous verrez le résultat suivant:
Outputgpg: assuming signed data in `openresty-.tar.gz'
gpg: Signature made Thu 17 Nov 2016 10:24:29 PM UTC using RSA key ID A0E98066
gpg: from "Yichun Zhang (agentzh) <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2545 1EB0 8846 0026 195B D62C B550 E09E A0E9 8066
L’avertissement que vous voyez est dû au fait que vous n’avez pas personnellement vérifié si cette clé appartient bien au propriétaire (c’est-à-dire que vous n’avez pas signé la clé publique avec votre propre clé privée). Il n’est pas facile de garantir complètement que cette clé publique appartient au propriétaire, ce qui n’est pas totalement fiable.
Cependant, dans ce cas, * Bonne signature * indique que ce fichier est bien le fichier que les auteurs d’OpenResty avaient l’intention de distribuer afin que nous puissions poursuivre l’installation.
Ensuite, extrayez le fichier téléchargé et déplacez-vous dans le répertoire nouvellement créé.
tar -xvf openresty-.tar.gz
cd openresty-
Nous devrons installer les outils nécessaires pour compiler OpenResty. Pour plus d’informations sur la compilation de programmes à partir des sources, voir https://www.digitalocean.com/community/tutorials/how-to-compile-and-install-packages-from-source-using-make-on-a-vps [ ce tutoriel sur l’utilisation de make pour installer les packages à partir des sources].
sudo apt-get install build-essential
Nous devrons également installer d’autres packages:
-
readline: OpenResty l’utilisera pour l’interface de ligne de commande.
-
ncurses: Il s’agit d’un autre logiciel que OpenResty utilisera pour son interface de ligne de commande.
-
PCRE: Ce logiciel fournira à OpenResty des capacités d’expression régulière.
-
OpenSSL: OpenSSL est utilisé pour les communications sécurisées, telles que TLS (HTTPS).
-
Perl: Perl est un langage de programmation utilisable dans OpenResty.
Pour installer ces packages, exécutez la commande suivante:
sudo apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl
Nous avons maintenant tous les composants nécessaires pour construire et installer OpenResty.
Étape 2 - Installation d’OpenResty
Nous allons configurer OpenResty avec les expressions régulières PCRE et le support IPv6. Nous allons également mettre en parallèle une partie du processus de construction en fournissant le drapeau + -j2 +
, qui indiquera + make +
que 2 travaux peuvent être exécutés simultanément. Cette commande testera principalement si toutes les dépendances sont disponibles sur votre système et rassemblera les informations qui seront utilisées ultérieurement par l’étape de construction. Il va également déjà construire des dépendances, telles que LuaJIT.
./configure -j2 --with-pcre-jit --with-ipv6
Ensuite, vous pouvez créer OpenResty, encore une fois en fournissant les indicateurs + -j2 +
pour le parallélisme. Cela compilera OpenResty lui-même.
make -j2
Enfin, vous pouvez installer OpenResty. En utilisant + sudo +
, vous vous assurez que tous les fichiers peuvent être copiés aux emplacements appropriés sur le système afin qu’OpenResty puisse les trouver lorsqu’il est en cours d’exécution.
sudo make install
Pour que le serveur Web fonctionne, vous devez autoriser les connexions HTTP dans votre pare-feu.
sudo ufw allow http
Vous pouvez éventuellement aussi autoriser HTTPS avec + sudo ufw allow https +
si vous comptez l’utiliser. Vous pouvez vérifier le changement dans le pare-feu en vérifiant son statut.
sudo ufw status
Vous devriez voir le trafic HTTP (port + 80 +
) autorisé dans la sortie affichée, ainsi que HTTPS (port + 443 +
) si vous l’avez ajouté.
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Vous pouvez maintenant vérifier si l’installation a fonctionné. Commencez par ouvrir OpenResty.
sudo /usr/local/openresty/bin/openresty
Il se terminera immédiatement sans sortie de texte si la commande aboutit. Dans ce cas, vous pouvez visiter + http: // +
dans votre navigateur. Vous verrez une page qui dit * Bienvenue à OpenResty! * Avec la confirmation de son installation et de son fonctionnement.
Vous pouvez maintenant arrêter le serveur OpenResty.
sudo /usr/local/openresty/bin/openresty -s quit
OpenResty est installé, mais vous devez toujours configurer OpenResty pour qu’il s’exécute au démarrage, de sorte que le serveur ne doit pas être démarré manuellement.
Étape 3 - Configurer OpenResty en tant que service
Ici, nous allons configurer OpenResty en tant que service afin qu’il démarre automatiquement au démarrage. Nous ferons cela en utilisant le service d’initialisation + systemd +
. Vous pouvez lire cette tutoriel sur les bases de systemd pour plus d’informations, et https: // www. .digitalocean.com / community / tutorials / arrangement-systemd-unités-et-unités-fichiers [tutoriel de ce fichier unité] pour des informations spécifiques sur les fichiers unité.
Commencez par créer un nouveau fichier + systemd +
avec + nano +
ou votre éditeur de texte préféré.
sudo nano /etc/systemd/system/openresty.service
Pour ce tutoriel, nous allons copier le fichier Nginx + systemd +
par défaut d’une nouvelle installation et le modifier pour OpenResty. Le fichier complet ressemble à ceci et devrait être collé dans le fichier que nous venons d’ouvrir. Nous allons parcourir chaque partie du fichier pour expliquer ce qu’il fait.
/etc/systemd/system/openresty.service
# Stop dance for OpenResty
# A modification of the Nginx systemd script
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the Nginx process.
# If, after 5s (--retry QUIT/5) OpenResty is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if OpenResty is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# Nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A dynamic web platform based on Nginx and LuaJIT.
After=network.target
[Service]
Type=forking
PIDFile=/run/openresty.pid
ExecStartPre=/usr/local/openresty/bin/openresty -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/local/openresty/bin/openresty -g 'daemon on; master_process on;'
ExecReload=/usr/local/openresty/bin/openresty -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/openresty.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
Dans la section + [Unit] +
:
-
+ After = network.target +
permet à OpenResty de démarrer une fois le réseau mis en place afin qu’OpenResty puisse se lier et écouter les ports. Cela lui permet d’être atteint de l’extérieur.
Dans la section + [Service] +
:
-
+ Type = forking +
indique+ systemd +
que le processus appelé dans+ ExecStart +
démarrera le service en arrière-plan et qu’il s’arrêtera après l’avoir fait. -
+ PIDFile = / run / openresty.pid +
indique+ systemd +
où trouver le fichier PID créé par OpenResty à son démarrage. Cela permet à+ systemd +
de savoir si OpenResty est toujours en cours d’exécution. -
+ ExecStartPre = / usr / local / openresty / bin / openresty -t -q -g 'daemon on; master_process on; '+ `appelle le script OpenResty sans le démarrer. L’indicateur `+ -t +
indique à OpenResty que nous voulons seulement qu’il teste le fichier de configuration; le drapeau+ -q +
lui indique que nous voulons supprimer toute sortie non-erreur; l’indicateur+ -g +
active les directives globales+ le démon; master_process on + `qui indique à OpenResty que nous voulons qu’il démarre en arrière-plan en tant que démon. Nous exécutons ce script sous la forme `+ ExecStartPre +
afin que+ systemd +
n’essaie pas de démarrer OpenResty lorsque le fichier de configuration est invalide, car cette erreur entraînera une erreur. -
+ ExecStart = / usr / local / openresty / bin / openresty -g 'daemon on; master_process on; '+ `démarre réellement OpenReesty. Ceci est identique à `+ ExecStartPre +
sans l’indicateur+ -t +
. -
+ ExecReload = / usr / local / openresty / bin / openresty -g 'démon sur; master_process on; ' -s reload + `dit
+ systemd +pour exécuter cette commande lorsque nous exécutons
+ systemctl reload openresty +. L’indicateur `+ -s +
indique à OpenResty de recharger son fichier de configuration. -
+ ExecStop = - / sbin / start-stop-daemon --quiet --stop --retry QUIT / 5 --pidfile / run / openresty.pid +
indique à + + systemd +d’exécuter cette commande lorsque OpenResty est arrêté. Il envoie `+ SIGSTOP +
au processus indiqué dans le fichier PID. S’il fonctionne toujours 5 secondes plus tard,+ systemd +
prendra le contrôle via les deux options suivantes. -
+ TimeoutStopSec = 5 +
indique+ systemd +
nous voulons que le processus soit arrêté dans 5 secondes. Si cela ne s’arrête pas,+ systemd +
va forcer pour arrêter OpenRest. -
+ KillMode = mixed +
spécifie comment+ systemd +
doit essayer d’arrêter OpenResty lorsqu’il ne s’est pas arrêté après 5 secondes.
Dans la section + [Install] +
:
-
+ WantedBy = multi-user.target +
indique+ systemd +
quand nous voulons que le service soit démarré s’il est configuré pour être démarré au démarrage.+ multi-user.target +
signifie que le service ne sera démarré que lorsqu’un système multi-utilisateurs a été démarré, c’est-à-dire nous pouvons exécuter OpenResty en tant qu’utilisateur différent.
C’est tout pour le fichier + etc / systemd / system / openresty.service +
. Ensuite, nous devons personnaliser le fichier de configuration OpenResty Nginx et activer le service.
Ouvrez d’abord le fichier de configuration.
sudo nano /usr/local/openresty/nginx/conf/nginx.conf
Par défaut, cela ressemblera à ceci:
Par défaut /usr/local/openresty/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
. . .
Supprimez tout ce qui se trouve avant la ligne + events {+
et remplacez-le par les trois lignes suivantes:
Mise à jour /usr/local/openresty/nginx/conf/nginx.conf
events {
worker_connections 1024;
}
. . .
Ce fichier garantit que nous sommes en train de fonctionner en tant qu’utilisateur * www-data * et que + systemd +
peut reconnaître le moment où OpenResty est en cours d’exécution en raison de la ligne + pid +
qui sera créée par OpenResty une fois démarré.
Enregistrez et fermez le fichier.
Ensuite, créez le répertoire du journal.
sudo mkdir /var/log/openresty
Rechargez le service + systemd
afin qu’il puisse trouver votre fichier.
sudo systemctl daemon-reload
Maintenant, démarrez OpenResty via + systemd +
.
sudo systemctl start openresty
Vous pouvez maintenant visiter + http: // +
à nouveau et voir la même page Web qu’avant. La différence est que maintenant, le processus a été lancé par + systemd +
.
La dernière étape consiste à activer le service afin de s’assurer que OpenResty est démarré au démarrage.
sudo systemctl enable openresty
Pour en savoir plus sur la gestion des services et des unités + systemd +
dans notre services et tutoriel des unités.
Maintenant que nous avons configuré le service, nous pouvons configurer OpenResty de manière à ce qu’il soit possible, par exemple. connectez-vous à un emplacement commun.
Étape 4 - Configuration d’OpenResty
Pour configurer OpenResty, nous avons utilisé la configuration par défaut de Nginx comme référence, afin qu’elle corresponde généralement à ce que vous connaissez peut-être.
Commencez par ouvrir à nouveau le fichier de configuration OpenResty:
sudo nano /usr/local/openresty/nginx/conf/nginx.conf
Cette fois, nous allons modifier le bloc + http
et déplacer le bloc` + serveur` à l’intérieur de ce bloc + http
vers un nouveau fichier afin d’améliorer la structure. Premièrement, localisez la ligne + http {+
et supprimez tout ce qui suit, à l’exception de la dernière ligne avec le +} +
correspondant.
Current /usr/local/openresty/nginx/conf/nginx.conf
user www-data;
worker_processes auto;
pid /run/openresty.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
. . .
}
Ensuite, copiez le texte suivant dans le bloc + http +
afin que tout votre fichier ressemble à ceci. Nous allons passer en revue les modifications une par une.
/usr/local/openresty/nginx/conf/nginx.conf
user www-data;
worker_processes auto;
pid /run/openresty.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/openresty/access.log;
error_log /var/log/openresty/error.log;
gzip on;
gzip_disable "msie6";
include ../sites/*;
}
Enregistrez et fermez le fichier.
Les modifications apportées au fichier par défaut sont les suivantes:
-
Sans commenter
+ tcp_nopush on; +
, qui indique à OpenResty d’envoyer uniquement des paquets complets. Cette option est utile lorsque vous utilisez l’option+ sendfile +
, qui permettra à OpenResty d’optimiser l’envoi de fichiers statiques à un client. -
Ajout de
+ tcp_nodelay on; +
. Cette option essaiera d’envoyer les paquets dès que possible, ce qui peut sembler contraire à l’option ci-dessus, mais elle est utilisée à un moment différent.+ tcp_nodelay +
est utilisé uniquement lors de l’utilisation de l’option+ keepalive +
sur les demandes HTTP, qui est une connexion à un serveur Web par un navigateur Web qui évite la surcharge d’initier une connexion HTTP chaque fois qu’une demande est faite. -
Ajouter et modifier les lignes
+ ssl_protocols +
et+ ssl_prefer_server_ciphers +
. Ces options configurent les options SSL d’OpenResty. Nous avons supprimé les anciens protocoles vulnérables aux attaques connues sur HTTPS, tels que l’attaque POODLE. -
Ajout des lignes
+ access_log +
et+ + error_log +
, qui configure où se trouvent les journaux du serveur Web. Nous stockons les journaux dans le répertoire+ / var / log / openresty +
, que nous avons créé à l’étape précédente. -
Décommenter
+ gzip sur +
et ajouter+ gzip_disable" msie6 "+
. Ces options configureront GZIP, qui compressera les pages Web de manière à limiter le nombre de données à transférer. Nous ajoutons également la dernière option car Internet Explorer 6 (et versions antérieures) ne traite pas toujours le contenu GZIP correctement. -
Ajout de
+ include ../ sites / *; +
, qui indique à OpenResty de rechercher des fichiers de configuration supplémentaires dans le répertoire+ / usr / local / openresty / nginx / sites +
, qui seront créés dans un instant. -
Suppression de tous les blocs
+ serveur +
, que nous déplacerons dans un nouveau fichier ultérieurement dans cette étape.
Ensuite, créez le nouveau répertoire + sites +
que nous avons spécifié dans la ligne + include +
.
sudo mkdir /usr/local/openresty/nginx/sites
Créez le site + default +
.
sudo nano /usr/local/openresty/nginx/sites/default.conf
Ajoutez ce qui suit dans ce nouveau fichier. Il s’agit du déplacement du bloc de serveur d’origine de + nginx.conf +
, mais comporte des commentaires en ligne pour plus de détails.
/usr/local/openresty/nginx/sites/default.conf
server {
# Listen on port 80.
listen 80 default_server;
listen [::]:80 default_server;
# The document root.
root /usr/local/openresty/nginx/html/default;
# Add index.php if you are using PHP.
index index.html index.htm;
# The server name, which isn't relevant in this case, because we only have one.
server_name _;
# When we try to access this site...
location / {
# ... first attempt to serve request as file, then as a directory,
# then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# Redirect server error pages to the static page /50x.html.
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/openresty/nginx/html;
}
}
Enregistrez et fermez le fichier.
Maintenant, créez un nouveau répertoire pour ce site.
sudo mkdir /usr/local/openresty/nginx/html/default
Déplacez ensuite le + index.html
d’origine de son emplacement d’origine vers le nouveau répertoire.
sudo mv /usr/local/openresty/nginx/html/index.html /usr/local/openresty/nginx/html/default
Enfin, redémarrez OpenResty pour utiliser ce nouveau site.
sudo systemctl restart openresty
Vous pouvez maintenant visiter à nouveau + http: // +
et voir la même page Web que précédemment.
Maintenant que OpenResty est entièrement configuré, nous pouvons essayer certaines des fonctionnalités introduites par OpenResty qui ne sont pas disponibles par défaut dans Nginx.
Étape 5 - Utilisation du module OpenResty Lua
Dans cette section, nous examinerons une combinaison de différents modules ajoutés par OpenResty qui existent tous pour accueillir les scripts Lua. Nous allons modifier + / usr / local / openresty / nginx / sites / default.conf +
tout au long de cette étape, ouvrez-le d’abord.
sudo nano /usr/local/openresty/nginx/sites/default.conf
Tout d’abord, nous allons examiner l’option de configuration + content_by_lua_block +
. Copiez le bloc + location +
de l’exemple de configuration ci-dessous et ajoutez-le dans le bloc + serveur +
, sous les deux blocs + emplacement +
existants.
/usr/local/openresty/nginx/sites/default.conf exemple de content_by_lua_block
server {
. . .
location /example {
default_type 'text/plain';
content_by_lua_block {
ngx.say('Hello, Sammy!')
}
}
}
Enregistrez et fermez le fichier, puis rechargez la configuration.
sudo systemctl reload openresty
Si vous visitez + http: /// example +
maintenant, vous verrez une page qui dit * Bonjour, Sammy! *. Expliquons comment cela fonctionne.
La directive de configuration + content_by_lua_block +
exécute tout ce qu’elle contient en tant que code Lua. Ici, nous avons utilisé la fonction Lua + ngx.say +
pour imprimer le message * Bonjour Sammy! * Sur la page.
Pour un autre exemple, remplacez le contenu du bloc + location / example +
par ceci:
/usr/local/openresty/nginx/sites/default.conf content_by_lua_file exemple
server {
. . .
location /example {
default_type 'text/plain';
content_by_lua_file /usr/local/openresty/nginx/html/default/index.lua;
}
}
+ Content_by_lua_file +
charge le contenu Lua depuis un fichier externe, créons donc celui que nous avons spécifié ci-dessus: + / usr / local / openresty / nginx / html / default / index.lua +
.
sudo nano /usr/local/openresty/nginx/html/default/index.lua
Ajoutez les éléments suivants au fichier, puis enregistrez-le et fermez-le.
/usr/local/openresty/nginx/html/default/index.lua
local name = ngx.var.arg_name or "Anonymous"
ngx.say("Hello, ", name, "!")
Il s’agit d’un simple morceau de Lua qui lit un paramètre de requête dans l’URL, + name +
, et personnalise le message d’accueil. Si aucun paramètre n’est transmis, il utilise «Anonyme» à la place.
Rechargez à nouveau la configuration.
sudo systemctl reload openresty
Maintenant, visitez + http: /// example? Name = +
dans votre navigateur. Ceci affichera * Bonjour, Sammy! *. Vous pouvez modifier le paramètre de requête + nom +
ou bien l’omettre complètement.
Hello, Sammy!
Vous pouvez également modifier le paramètre de requête + name +
pour afficher tout autre nom.
Conclusion
Dans cet article, vous configurez OpenResty, qui vous permettra d’utiliser des scripts Lua dans un serveur Nginx. Il est possible de créer des scripts Lua beaucoup plus complexes. Vous pouvez également, par exemple, limiter l’accès à l’aide de scripts Lua ou réécrire certaines demandes à l’aide de Lua. Vous trouverez la documentation sur la page lua-nginx-module. Il existe même des infrastructures Web complètes qui utilisent Lua sur OpenResty, telles que Lapis.
Si vous voulez en savoir plus, vous pouvez visiter le site Web OpenResty. Étant donné qu’OpenResty n’est qu’une installation étendue de Nginx, vous pouvez également apprendre à configurer des blocs de serveur dans la page https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual. -hosts-on-ubuntu-16-04 [Tutoriel sur les blocs de serveur Nginx], mais veillez à remplacer les chemins utilisés dans ce tutoriel par les chemins utilisés dans celui-ci.