Instalación de idiomas dinámicos FCGIWrap y habilitando Perl, Ruby y Bash en Gentoo Lemp

Instalación de idiomas dinámicos FCGIWrap y habilitando Perl, Ruby y Bash en Gentoo Lemp

Este tutorial está estrictamente relacionado con la primera en la instalación de Lemp en Gentoo y trata otros problemas extendidos del servidor, como habilitar lenguajes dinámicos de secuencias de comandos como Perl o Bash o Ruby a través de Puerta de enlace fcgiwrap, y editar Nginx virtual hosts archivos de configuración para servir contenido dinámico usando .por favor, .RB y .CGI guiones.

Instale FCGIWrap con Perl, Ruby y Bash

Requisitos

  1. Pila lemp instalada en gentoo - https: // www.tecmenta.com/install-Lemp-in-Gentoo-Linux/

Paso 1: Habilitar fcgiwrap en gentoo lemp

Fcgiwrap es una parte de Interfaz Nginx Fastcgi Common Gateway que procesan otros idiomas dinámicos de secuencias de comandos, como los scripts Perl o Bash o Ruby, funcionan mediante el procesamiento de las solicitudes recibidas de Nginx, a través de TCP o Sockets UNIX, de manera independiente y devuelve el resultado producido a Nginx, que, en términos, reenviará respuestas clientes de regreso a final.

1. Primero comencemos por instalar Fccgiwrap Proceso en Gentoo Linux usando el siguiente comando.

# emerge --ask www-misc/fcgiwrap
Instalar el paquete FCCGIWrap

2. Por defecto, el paquete fcgiwrap no proporciona ningún en eso scripts en gentoo para administrar el proceso. Después de que los paquetes se hayan compilado e instalado, cree lo siguiente en eso Scripts que lo ayudan a administrar el proceso FCGIWRAP utilizando tres enfoques: ya sea iniciar el proceso utilizando Tornillos de dominio Unix o usar local TCP Sockets o usar ambos al mismo tiempo.

Usando el script de socket tcp

Crear un archivo init en /etc/init.d/ ruta con el siguiente contenido del archivo.

# nano /etc /init.d/fcgiwrap

Agregue el siguiente contenido del archivo.

#!/sbin/runscript ip = "0.0.0.0 "Port =" 12345 "Start () eBegin" Iniciar proceso fcgiwrap ... "/usr/sbin/fcgiwrap -s tcp: $ ip: $ port & tcp_sock =" netstat -tulpn | GREP FCGIWRAP Detalles del socket "echo": $ tcp_sock "eend $? "Se encontraron errores al iniciar el proceso fcgiwrap" stop () eBegin "detener el proceso fcgiwrap ..." pid = "ps a | grep fcgiwrap | grep tcp | Cut -d" -f1 "kill -s 1 $ pid tcp_sock =" netstat -tulpn | grep fcgiwrap "si prueba $ tcp_sock = 2> /dev /null; luego echo "El proceso fcgiWrap detuvo con éxito" tcp_sock = "netstat -atulpn | grep $ puerto" si prueba $ tcp_sock = 2> /dev /null; Entonces echo "no se encontró la conexión fcgiwrap encontrada ..." más eco "espera para cerrar las conexiones fcgiwrap abiertos ... verificar con 'status'" echo -e "Detalles del socket: \ n $ tcp_sock" fi más echo "fcgiwarp todavía se está ejecutando!Detalles del socket "echo": $ tcp_sock "Fi eend $? "Los errores se encontraron al detener el proceso FCGIWrap ..." status () eBegin "Estado del proceso fcgiwrap ..." tcp_sock = "netstat -atulpn | grep $ puerto" si prueba $ tcp_sock = 2> /dev /null; Luego se ECHO "FCGIWRAP Process no ejecuta" el más eco "El proceso FCGIWARP se está ejecutando!Detalles del socket "echo -e": \ n $ tcp_sock "Fi eend $? "Se encontraron errores al detener el proceso FCGIWrap ..."
Usando el script de socket tcp

Como puede ver, el archivo de script contiene dos variables al principio, respectivamente IP y puerto. Cambie estas variables con sus propias necesidades y asegúrese de que no se superpongan con otros servicios en su sistema, especialmente la variable de puerto: el valor predeterminado aquí es 12345 - cambiar en consecuencia.

Usando 0.0.0.0 en la variable IP permite que el proceso se vincule y escuche en cualquier IP (fuera accesible si no tiene un firewall), pero por razones de seguridad debe cambiarlo solo para escuchar localmente, en 127.0.0.1, A menos que tenga otras razones, como configurar remotamente la puerta de enlace fcgiwrap en un nodo diferente para el rendimiento o el equilibrio de carga.

3. Una vez creado el archivo, agregar permisos de ejecución y administrar el proceso de demonio utilizando interruptores de inicio, parada o estado. El interruptor de estado le mostrará información de socket relevante como Puerto Combinarlo escucha y si alguna conexión activa donde se inicializa. Además, si el proceso tiene conexiones activas en TIEMPO DE ESPERA estado no puede reiniciarlo hasta que se cierren todas las conexiones TCP.

# chmod +x /etc /init.d/fcgiwrap # servicio iniciar fcgiwrap #/etc/init.estado de d/fcgiwrap
Iniciar servicio FCGIWrap
Usando el script de socket unix

Como se presentó anteriormente, FCGIWRAP puede ejecutarse simultáneamente usando ambos enchufes, por lo que cambiará ligeramente el nombre del segundo script a fcgiwrap-unix-socket, Para asegurarse de que ambos puedan iniciarse y ejecutar el mismo tiempo.

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

Use el siguiente contenido del archivo para unix socket.

#!/sbin/runscript sock_detail = "ps a | grep fcgiwrap-unix | head -1" start () eBegin "iniciando el proceso fcgiwrap-unix-socket ..."/usr/sbin/fcgiwrap -s unix:/run/fcgiwrap-unix.Sock & Sleep 2 /bin /chown nginx: nginx /run /fcgiwrap-unix.Sock Sleep 1 Sock = "LS -al /Run /FcgiWrap -Unix.Detalles del enchufe "echo": $ calcetín "eend $? "Se encontraron errores al iniciar el proceso fcgiwrap" stop () eBegin "deteniendo el proceso fcgiwrap -unix -socket ..." pid = "ps a | grep fcgiwrap | grep unix | Cut -d" -f1 "rm -f /runn /fcgiwrap-unix.Sock Kill -S 1 $ PID ECHO "El proceso fcgiWrap detuvo con éxito" #Killall/usr/sbin/fcgiwrap sleep 1 echo "Detalles del socket: $ SOCK" EEND $? "Se encontraron errores al detener el proceso FCGIWrap ..." status () eBegin "estado fcgiwrap-unix-socket proceso ..." Si test -s /run /fcgiwrap-unix.calcetín; Entonces el proceso de echo "se inicia con socket: $ sock_detail" else eco "proceso fcgiwrap no ejecutado!"Fi eend $? "Se encontraron errores al detener el proceso FCGIWrap ..."
Usando el script de socket unix

4. Asegure nuevamente que este archivo sea ejecutable y use los mismos interruptores de servicio: comenzar, detener o estado. He establecido la ruta predeterminada para este socket en /run/fcgiwrap-unix.calcetín ruta del sistema. Inicie el proceso y verifíquelo usando estado cambiar o lista /correr Contenido de directorio y localizar el socket, o usar ps -a | grep fcgiwrap dominio.

# chmod +x /etc /init.d/fcgiwrap-unix-socket # servicio iniciar fcgiwrap-unix-socket #/etc/init.D/fcgiwrap-unix-socket status # ps -a | grep fcgiwrap
Iniciar y verificar fcgiwrap

Como se mencionó anteriormente, FCGIWrap puede ejecutarse con TCP y Sockets Unix simultáneos, pero si no necesita conexiones de puerta de enlace externas, se adhiere a Socador de dominio Unix Solo, porque utiliza la comunicación de interprocesos, que es más rápida que la comunicación a través de las conexiones de bucle de bucle de TCP, y utiliza menos gastos generales de TCP.

Socador de dominio Unix

Paso 2: Habilitar scripts CGI en Nginx

5. Para que Nginx analice y ejecute scripts de Perl o Bash a través de la interfaz de puerta de enlace común rápida, los hosts virtuales deben configurarse con las definiciones de FCGIWrap en la ruta raíz o las declaraciones de ubicación.

Un ejemplo, se presenta a continuación (localhost), que activa los scripts de Perl y CGI en todos los archivos colocados en la ruta raíz (/var/www/localhost/htdocs/) con .por favor y .CGI extensión utilizando los enchufes TCP FCGIWrap para la ruta de documento raíz predeterminada, la segunda ubicación usando Tornillos de dominio Unix, con un índice.por favor archivo y la tercera ubicación es usar TCP Sockets con un índice.CGI archivo.

Coloque el siguiente contenido, o simplemente algunas partes, a su archivo de configuración de host virtual deseado, desea activar los scripts de Perl o Bash con sockets Unix o TCP en diferentes ubicaciones, modificando fastcgi_pass declaración de argumento.

# nano/etc/nginx/sites disponible/localhost.confusión

Editar hostil.confusión parecer en la plantilla a continuación.

servidor escuchar 80; server_name localhost; access_log/var/log/nginx/localhost_access_log main; error_log/var/log/nginx/localhost_error_log información; root/var/www/localhost/htdocs/; ubicación / autoindex on; índice índice.índice HTML.índice HTM.php;  ## php -fpm gateway ### ubicación ~ \.php $ try_files $ uri = 404; incluir/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 9001;  ## FCGIWrap Gateway en todos los archivos en Root con TCP Sockets ### Ubicación ~ \.(PL | CGI | RB) $ ​​Índice FastCGI_Index.índice CGI.pl; incluir/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 12345;  ## fcgiwrap gateway en todos los archivos en la segunda carpeta root con índice.PL usando sockets Unix ### ubicación /segundo índice de índice.pl; root/var/www/localhost/htdocs/; Ubicación ~ \.(PL | CGI | RB) $ ​​incluir/etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/fcgiwrap-unix.calcetín; fastcgi_param script_filename $ document_root $ fastcgi_script_name;  ## fcgiwrap gateway en todos los archivos en la tercera carpeta root con índice.CGI usando TCP Sockets ### ubicación /tercera índice de índice.CGI; Ubicación ~ \.(PL | CGI | RB) $ ​​incluir/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 12345; 

6. Después de terminar de editar nginx hostil.confusión, o su archivo de configuración de host virtual específico, muévase a la ruta de la raíz del documento predeterminada de su sitio web, cree esas dos carpetas para reflejar su declaración de ubicación y crear archivos de índice para cada ubicación con su extensión específica.

# CD/var/www/localhost/htdocs # mkdir segundo tercio

Crear índice.por favor Archivo en la segunda ubicación con el siguiente contenido.

# nano/var/www/localhost/htdocs/segundo/index.por favor

Agregue este contenido para obtener variables de entorno.

#!/usr/bin/perl print "Tipo de contenido: texto/html \ n \ n"; imprimir <Un índice CGI de Perl en la segunda ubicación con variables envéticas  Html imprimir "Tipo de contenido: texto/html \ n \ n"; foreach my $ keys (sort keys %env) imprimir "$ keys = $ env $ keys
\ n "; Salir;

Entonces crear índice.CGI Archivo en la tercera ubicación con el siguiente contenido.

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

Agregue este contenido para obtener variables de entorno.

#!/bin/bash echo contenido tipo: texto/html echo "" gato << EOF  Bash script 
 

Un índice de CGI bash en tercera ubicación con variables envéticas

EOF env envían gato << EOF EOF

7. Cuando termine de editar, haga que ambos archivos sean ejecutables, reinicie el servidor NGINX y asegúrese de que ambos sockets FCGIWrap se estén ejecutando.

# chmod +x/var/www/localhost/htdocs/segundo/index.PL # chmod +x/var/www/localhost/htdocs/tercero/index.CGI # Servicio Nginx reiniciar # servicio fcgiwrap inicio # servicio fcgiwrap-unix-socket inicio

A continuación, redirige su navegador local en la siguiente URL.

http: // localhost http: // localhost/segundo/http: // localhost/tercero/

El resultado debe aparecer en las capturas de pantalla a continuación.

Verificar el directorio CGI Una página de índice CGI de Perl Una página de índice CGI de Bash

8. Si todo está en su lugar y está configurado correctamente, habilite que ambos demonios FCGIWrap inicien automáticamente, después de reiniciarse emitiendo los siguientes comandos (en caso de que haya configurado NGINX para usar ambos sockets CGI).

# rc-update add fcgiwrap predeterminado # rc-update agregar fcgiwrap-unix-socket predeterminado

Paso 3: Active el soporte de Ruby en FCGIWRAP

9. Si necesita ejecutar scripts de rubí dinámicos en Nginx FCGI, debe instalar Rubí intérprete en gentoo con el siguiente comando.

# EMERGE -SACK RUBY
Instalar Ruby intérprete

10. Después de que el paquete haya sido compilado e instalado, muévase a Nginx sitios disponibles y editar hostil.confusión Archivo agregando las siguientes declaraciones antes del último soporte rizado "", que activa el soporte para ejecutar scripts de Ruby en una cuarta ubicación en la ruta de raíz de documento predeterminada atendida por Nginx Localhost.

# nano/etc/nginx/sites disponible/localhost.confusión

Use las siguientes directivas Nginx.

## FCGIWrap Gateway en todos los archivos en la cuarta carpeta root con índice.RB bajo TCP Sockets ### Ubicación /Cuarto índice de índice.rb; Ubicación ~ \.RB $ incluir/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 12345;  ## último soporte rizado que cierra las definiciones del servidor Nginx ##
Habilitar el soporte de Ruby en FCGIWrap

11. Ahora, para probar la configuración, cree el cuarto directorio en /var/www/localhost/htdocs ruta, cree un script de índice de ruby ​​ejecutable con .RB extensión y agregar el siguiente contenido.

# mkdir/var/www/localhost/htdocs/cuarto # nano/var/www/localhost/htdocs/cuarto/index.RB

Índice de rubí.Ejemplo de RB.

#!/usr/bin/ruby pone "http/1.0 200 OK "Ponga" Tipo de contenido: texto/html \ n \ n "pone" script ruby ​​"pon"
" pone "

Un índice CGI Ruby en la cuarta ubicación con variables Env envío

"Sistema ('Env')

12. Después de agregar permisos de ejecución en el archivo, reinicie Nginx Daemon para aplicar configuraciones.

# chmod +x/var/www/localhost/htdocs/cuarto/index.RB # Servicio Nginx reiniciar

Abra su navegador y navegue a la URL http: // localhost/cuarto/, que debería presentarle el siguiente contenido.

Página de índice CGI Ruby

Eso es todo por ahora, ha configurado a Nginx para servir scripts dinámicos de Perl, Ruby y Bash en FastCGI Gateway, pero tenga en cuenta que ejecutar este tipo de scripts interpretados en Nginx CGI Gateway puede ser peligroso e imponer riesgos de seguridad seriamente en su servidor porque ellos Ejecute usando conchas activas en su sistema, pero puede ampliar la barrera estática impuesta por HTML estático, agregando funcionalidad dinámica a su sitio web.