Installation de FCGIWRAP et activer les langues dynamiques Perl, Ruby et Bash sur Gentoo Lemp

Installation de FCGIWRAP et activer les langues dynamiques Perl, Ruby et Bash sur Gentoo Lemp

Ce tutoriel est strictement lié à l'ancien sur l'installation de LEMP sur Gentoo et traite d'autres problèmes étendus du serveur tels que l'activation des langages de script dynamique comme Perl ou Bash ou Ruby à travers Passerelle fcgiwrap, et modifier les fichiers de configuration des hôtes virtuels virtuels pour servir du contenu dynamique en utilisant .PL, .RB et .CGI scripts.

Installez FCGIWRAP avec Perl, Ruby et Bash

Exigences

  1. Lemp Stack installé sur gentoo - https: // www.Tecmint.com / install-lemp-in-gentoo-linux /

Étape 1: Activer fcgiwrap sur gentoo lemp

Fcgiwrap fait partie de Interface de passerelle commune de Nginx Fastcgi Quel processus d'autres langages de script dynamique, comme Perl ou Bash ou Ruby Scripts, fonctionnent en traitement des demandes reçues de Nginx, via TCP ou Unix Sockets, d'une manière indépendante et renvoie le résultat produit à Nginx, qui, à terme, transmettront les réponses Clients de retour aux fins.

1. Commençons par installer Fccgiwrap Processus sur Gentoo Linux en utilisant la commande suivante.

# émerger --ask www-miss / fcgiwrap
Installez le package FCCGIWRAP

2. Par défaut, le package FCGIWRAP ne fournit aucun init scripts sur gentoo pour gérer le processus. Une fois les packages compilés et installés, créez les éléments suivants init scripts qui vous aident à gérer le processus FCGIWRAP en utilisant trois approches: soit le lancement du processus en utilisant Sockets de domaine Unix ou en utilisant local Sockets TCP ou utiliser les deux en même temps.

Utilisation du script de socket TCP

Créer un fichier init sur / etc / init.d/ Chemin avec le contenu de fichier suivant.

# nano / etc / init.d / fcgiwrap

Ajouter le contenu du fichier suivant.

#!/ sbin / runscript ip = "0.0.0.0 "port =" 12345 "start () ebegin" Démarrage du processus fcgiwrap… "/ usr / sbin / fcgiwrap -s tcp: $ ip: $ port & tcp_sock =" netstat -tulpn | Grep fcgiwrap "Echo" Détails du socket: $ tcp_sock "eend $? "Des erreurs ont été rencontrées lors du démarrage du processus fcgiwrap" stop () ebegin "Arrêt du processus fcgiwrap…" pid = "ps a | grep fcgiwrap | grep tcp | cut -d" "-f1" kill -s 1 $ pid tcp_sock = " netstat -tulpn | grep fcgiwrap "si tester $ tcp_sock = 2> / dev / null; ECHO "Le processus fcgiwrap a ensuite réussi à arrêter" TCP_SOCK = "NetStat -Alpn | Grep $ port" Si test $ tcp_sock = 2> / dev / null; puis écho "pas de connexion fcgiwrap ouverte trouvée…" else echo "attendre pour fermer les connexions ouvertes fcgiwrap… veuillez vérifier avec les détails du socket" status "" echo -e ": \ n $ TCP_SOCK" Fi else echo "fcgiwarp Le processus est toujours en cours d'exécution est en cours d'exécution!Détails de la prise "Echo": $ TCP_SOCK "Fi Eend $? "Les erreurs ont été rencontrées lors de l'arrêt du processus fcgiwrap…" status () ebegin "État FcgiWrap Process…" TCP_SOCK = "netStat -Alpn | grep $ port" si test $ tcp_sock = 2> / dev / null; Ensuite, le processus FCGIWRAP Echo ne fonctionne pas "Else Echo" Le processus FCGIWARP est en cours d'exécution!Détails de socket "echo -e": \ n $ tcp_sock "fi eend $? "Des erreurs ont été rencontrées lors de l'arrêt du processus FCGIWRAP…"
Utilisation du script de socket TCP

Comme vous pouvez le voir, le fichier de script contient deux variables au début, respectivement IP et port. Modifiez ces variables avec vos propres besoins et assurez-vous qu'ils ne chevauchent pas d'autres services sur votre système, en particulier la variable de port - par défaut ici est 12345 - changer en conséquence.

En utilisant 0.0.0.0 sur la variable IP permet au processus de se lier et d'écouter sur n'importe quelle IP (accessible extérieure si vous n'avez pas de pare-feu), mais pour des raisons de sécurité, vous devriez le changer pour écouter localement uniquement, sur 127.0.0.1, Sauf si vous avez d'autres raisons comme la configuration à distance de la passerelle FCGIWRAP sur un nœud différent pour les performances ou l'équilibrage de chargement.

3. Une fois le fichier créé, ajoutez les autorisations d'exécution et gérez le processus de démon à l'aide des commutateurs de démarrage, d'arrêt ou d'état. Le commutateur d'état vous montrera des informations de prise pertinentes telles que Port IP la paire écouter et si une connexion active lors de l'initialisation. De plus, si le processus a des connexions actives dans TEMPS D'ATTENTE Indiquez que vous ne pouvez pas le redémarrer jusqu'à ce que toutes les connexions TCP se ferment.

# chmod + x / etc / init.d / fcgiwrap # service start fcgiwrap # / etc / init.statut d / fcgiwrap
Démarrer le service FCGIWRAP
Utilisation du script de socket Unix

Comme présenté précédemment, FCGIWRAP peut s'exécuter simultanément à l'aide des deux sockets, il va donc légèrement changer le nom du deuxième script en fcgiwrap-unix-socket, Pour s'assurer que les deux peuvent être démarrés et exécuter en même temps.

# nano / etc / init.d / fcgiwrap-unix-socket

Utilisez le contenu de fichier suivant pour Unix Socket.

#!/ sbin / runscript sock_detail = "ps a | grep fcgiwrap-Unix | head -1" start () ebegin "procédure fcgiwrap-unix-socket…" / usr / sbin / fcgiwrap -s unix: / run / fcigiwrap-Unix.chaussette et sommeil 2 / bin / chown nginx: nginx / run / fcgiwrap-Unix.Sock Sleep 1 sock = "ls -al / run / fcgiwrap-Unix.Détails de socket "Echo" Sock "? "Des erreurs ont été rencontrées lors du démarrage du processus fcgiwrap" stop () ebegin "Arrêt du processus fcgiwrap-unix-socket…" pid = "ps a | grep fcgiwrap | grep Unix | Cut -d" "-f1" rm -f / run / fcgiwrap-Unix.Sock Kill -s 1 $ pid echo "processus fcgiwrap avec succès arrêté" #Killall / usr / sbin / fcgiwrap sleep 1 echo "Détails de socket: $ sock" eend $? "Des erreurs ont été rencontrées lors de l'arrêt du processus fcgiwrap…" status () ebegin "État fcgiWrap-Unix-Socket…" Si test -s / run / fcgiwrap-Unix.chaussette; Puis l'écho "Le processus est démarré avec Socket: $ sock_detail" Else Echo "Le processus fcgiwrap ne fonctionne pas!"Fi eend $? "Des erreurs ont été rencontrées lors de l'arrêt du processus FCGIWRAP…"
Utilisation du script de socket Unix

4. Assurez-vous à nouveau que ce fichier est exécutable et utilisez les mêmes commutateurs de service: commencer, arrêt ou statut. J'ai défini le chemin par défaut de cette prise / run / fcgiwrap-Unix.chaussette chemin du système. Démarrer le processus et le vérifier en utilisant statut commutation ou liste /courir Contenu du répertoire et localiser la prise, ou utiliser PS -A | grep fcgiwrap commande.

# chmod + x / etc / init.D / fcgiwrap-Unix-Socket # Service Start Fcgiwrap-Unix-Socket # / etc / init.D / FCGIWRAP-UNIX-Socket Status # PS -A | grep fcgiwrap
Démarrer et vérifier fcgiwrap

Comme mentionné précédemment, FCGIWRAP peut fonctionner avec TCP et Unix Sockets simultanément, mais si vous n'avez pas besoin de connexions de passerelle externes Prise de domaine Unix Seulement, car il utilise la communication interprocess, qui est plus rapide que la communication sur les connexions de boucles TCP, et utilise moins de frais généraux TCP.

Prise de domaine Unix

Étape 2: Activer les scripts CGI sur Nginx

5. Pour Nginx pour analyser et exécuter les scripts Perl ou bash via une interface de passerelle commune rapide, les hôtes virtuels doivent être configurés avec les définitions FCGIWRAP sur le chemin racine ou les instructions de localisation.

Un exemple, est présenté ci-dessous (localhost), qui active les scripts Perl et CGI sur tous les fichiers placés dans le chemin racine (/ var / www / localhost / htdocs /) avec .PL et .CGI Extension à l'aide de sockets TCP FCGIWRAP pour le chemin du document racine par défaut, le deuxième emplacement à l'aide Sockets de domaine Unix, avec un indice.PL le fichier et le troisième emplacement utilisent Sockets TCP avec un indice.CGI déposer.

Placez le contenu suivant, ou juste certaines parties de celui-ci, dans le fichier de configuration de l'hôte virtuel souhaité que vous souhaitez activer des scripts dynamiques Perl ou Bash avec des prises UNIX ou TCP sous différents emplacements, en modifiant fastcgi_pass déclaration d'argument.

# nano / etc / nginx / sites-disponible / localhost.confli

Modifier hôte local.confli pour ressembler dans le modèle ci-dessous.

Server écouter 80; server_name localhost; access_log / var / log / nginx / localhost_access_log main; error_log / var / log / nginx / localhost_error_log info; root / var / www / localhost / htdocs /; Emplacement / AutoIndex sur; Index index.index html.index HTM.PHP;  ## PHP -FPM Gateway ### Emplacement ~ \.php $ try_files $ uri = 404; inclure / etc / nginx / fastcgi.conf; fastcgi_pass 127.0.0.1: 9001;  ## FcgiWrap Gateway sur tous les fichiers sous root avec TCP Sockets ### Emplacement ~ \.(pl | cgi | rb) $ Fastcgi_index index.index CGI.PL; inclure / etc / nginx / fastcgi.conf; fastcgi_pass 127.0.0.1: 12345;  ## FCGIWRAP Gateway sur tous les fichiers sous Root Second Folder avec index.PL Utilisation de Sockets Unix ### Emplacement / Second Index Index.PL; root / var / www / localhost / htdocs /; Emplacement ~ \.(pl | cgi | rb) $ include / etc / nginx / fastcgi.conf; fastcgi_pass Unix: / run / fcgiwrap-Unix.chaussette; fastcgi_param script_filename $ document_root $ fastcgi_script_name;  ## FcgiWrap Gateway sur tous les fichiers sous Root Third Dossier avec index.CGI à l'aide de sockets TCP ### Emplacement / troisième index index.CGI; Emplacement ~ \.(pl | cgi | rb) $ include / etc / nginx / fastcgi.conf; fastcgi_pass 127.0.0.1: 12345; 

6. Après avoir fini de modifier Nginx hôte local.confli, ou votre fichier de configuration d'hôte virtuel spécifique, passez à votre site Web de document par défaut de votre site Web, créez ces deux dossiers pour refléter votre instruction de localisation et créez des fichiers d'index pour chaque emplacement avec son extension spécifique.

# cd / var / www / localhost / htdocs # mkdir deuxième troisième

Créer indice.PL fichier sur le deuxième emplacement avec le contenu suivant.

# nano / var / www / localhost / htdocs / second / index.PL

Ajouter ce contenu pour obtenir des variables d'environnement.

#!/ usr / bin / perl print "contenu-type: text / html \ n \ n"; imprimer <Un index Perl CGI sur le deuxième emplacement avec des variables Env  HTML PRINT "Content-Type: text / html \ n \ n"; foreach mes $ keys (tries clés% env) print "$ keys = $ env $ keys
\ n "; exit;

Puis créer indice.CGI fichier sur le troisième emplacement avec le contenu suivant.

# nano / var / www / localhost / htdocs / tiers / index.CGI

Ajouter ce contenu pour obtenir des variables d'environnement.

#!/ Bin / Bash Echo Content-Type: Text / HTML Echo "" Cat << EOF  Bash script 
 

Un index CGI bash sur le troisième emplacement avec des variables Env

Eof envat chat << EOF EOF

7. Lorsque vous terminez le montage, créez les deux fichiers exécutables, redémarrez le serveur Nginx et assurez-vous que les deux sockets FCGIWRAP fonctionnent.

# chmod + x / var / www / localhost / htdocs / second / index.PL # chmod + x / var / www / localhost / htdocs / tiers / index.CGI # service nginx redémarrage # service fcgiwrap start # service fcgiwrap-unix-socket start

Ensuite, redirigez votre navigateur local sur URL suivant.

http: // localhost http: // localhost / second / http: // localhost / tiers /

Le résultat doit apparaître comme sur des captures d'écran ci-dessous.

Vérifiez le répertoire CGI Une page d'index Perl CGI Une page d'index CGI bash

8. Si tout est en place et correctement configuré, permettez aux deux démons FCGIWRAP de démarrer automatiquement, après redémarrage en émettant les commandes suivantes (au cas où vous avez configuré Nginx pour utiliser les deux sockets CGI).

# rc-update add fcgiwrap par défaut # rc-update Ajouter fcgiwrap-unix-socket par défaut

Étape 3: Activez le support Ruby sur FCGIWRAP

9. Si vous avez besoin d'exécuter des scripts Ruby dynamiques sur Nginx FCGI, vous devez installer Rubis interprète sur gentoo avec la commande suivante.

# Emerge --ask Ruby
Installer Ruby Interpreter

dix. Une fois le package compilé et installé, passez à Nginx les sites disponibles et modifier hôte local.confli fichier en ajoutant les déclarations suivantes avant le dernier support bouclé "", qui active le support pour exécuter Ruby Scripts sur un quatrième emplacement sous un chemin racine de document par défaut servi par Nginx LocalHost.

# nano / etc / nginx / sites-disponible / localhost.confli

Utilisez les directives Nginx suivantes.

## FCGIWRAP Gateway sur tous les fichiers sous Root Quatrième dossier avec index.RB sous TCP Sockets ### Emplacement / Quatrième Index Index.RB; Emplacement ~ \.RB $ include / etc / nginx / fastcgi.conf; fastcgi_pass 127.0.0.1: 12345;  ## Bracket dernier bouclé qui ferme les définitions de serveur Nginx ##
Activer le support Ruby sur FCGIWRAP

11. Maintenant, pour tester la configuration, créez le quatrième répertoire sous / var / www / localhost / htdocs Chemin, créez un script d'index Ruby exécutable avec .RB Extension et ajouter le contenu suivant.

# mkdir / var / www / localhost / htdocs / quatrième # nano / var / www / localhost / htdocs / quatrième / index.RB

Index Ruby.Exemple RB.

#!/ usr / bin / ruby ​​met "http / 1.0 200 OK "met" Content-Type: text / html \ n \ n "met" Ruby Script "met"
"met"

Un index Ruby CGI sur le quatrième emplacement avec des variables Env

"Système ('Env')

12. Après avoir ajouté des autorisations d'exécution dans le fichier, redémarrez le démon Nginx pour appliquer des configurations.

# chmod + x / var / www / localhost / htdocs / quatrième / index.RB # Service Nginx Redémarrer

Ouvrez votre navigateur et accédez à l'URL http: // localhost / quatrième /, qui devrait vous présenter le contenu suivant.

Page d'index Ruby CGI

C'est tout pour l'instant, vous avez configuré Nginx pour servir les scripts dynamiques Perl, Ruby et Bash sur la passerelle FastCGI, mais sachez que l'exécution de ce type de scripts interprétés sur la passerelle NGINX CGI peut être dangereux et imposer des risques de sécurité sérieusement sur votre serveur car ils Exécutez à l'aide de shells actifs sous votre système, mais peut étendre la barrière statique imposée par HTML statique, en ajoutant des fonctionnalités dynamiques à votre site Web.