Installation af FcgiWrap og aktivering af dynamiske sprog i Perl, Ruby og Bash på Gentoo LEMP
Denne vejledning er nøje relateret til den tidligere om LEMP-installation på Gentoo og behandler andre serverudvidede problemer såsom aktivering af dynamiske script-sprog som Perl eller Bash eller Ruby gennem Fcgiwrap Gateway og redigering af Nginx Virtual Hosts-konfigurationsfiler til at tjene dynamisk indhold ved hjælp af .pl , .rb og .cgi scripts.
- LEMP-stak installeret på Gentoo - https://linux-console.net/install-lemp-in-gentoo-linux/
Trin 1: Aktivér FCGIWRAP på Gentoo LEMP
Fcgiwrap er en del af Nginx FastCGI Common Gateway Interface , som behandler andre dynamiske script-sprog, som Perl eller Bash eller Ruby scripts, fungerer ved at behandle anmodninger modtaget fra Nginx via TCP eller Unix Sockets på en uafhængig måde og returnerer det producerede resultat tilbage til Nginx, som på sigt videresender svar tilbage til slutklienter.
1. Lad os først starte med at installere FCcgiwrap -processen på Gentoo Linux ved hjælp af følgende kommando.
# emerge --ask www-misc/fcgiwrap
2. Som standard leverer Fcgiwrap-pakken ingen init scripts på Gentoo til at styre processen. Når pakkerne er kompileret og installeret, skal du oprette følgende init scripts, der hjælper dig med at styre Fcgiwrap-processen ved hjælp af tre fremgangsmåder: enten at starte processen ved hjælp af Unix Domain Sockets eller ved hjælp af lokale < b> TCP-stik eller ved hjælp af begge på samme tid.
Opret en init-fil på /etc/init.d/ sti med følgende filindhold.
# nano /etc/init.d/fcgiwrap
Tilføj følgende filindhold.
#!/sbin/runscript ip="0.0.0.0" port="12345" start() { ebegin "Starting fcgiwrap process..." /usr/sbin/fcgiwrap -s tcp:$ip:$port & tcp_sock=`netstat -tulpn | grep fcgiwrap` echo "Socket details: $tcp_sock" eend $? "Errors were encountered while starting fcgiwrap process" } stop() { ebegin "Stopping fcgiwrap process..." pid=`ps a | grep fcgiwrap | grep tcp | cut -d" " -f1` kill -s 1 $pid tcp_sock=`netstat -tulpn | grep fcgiwrap` if test $tcp_sock = 2> /dev/null ; then echo "Fcgiwrap process successfully stoped" tcp_sock=`netstat -atulpn | grep $port` if test $tcp_sock = 2> /dev/null ; then echo "No open fcgiwrap connection found..." else echo "Wait to close fcgiwrap open connections...please verify with 'status'" echo -e "Socket details: \n$tcp_sock" fi else echo "Fcgiwarp process is still running!" echo "Socket details: $tcp_sock" fi eend $? "Errors were encountered while stopping fcgiwrap process..." } status() { ebegin "Status fcgiwrap process..." tcp_sock=`netstat -atulpn | grep $port` if test $tcp_sock = 2> /dev/null ; then echo "Fcgiwrap process not running" else echo "Fcgiwarp process is running!" echo -e "Socket details: \n$tcp_sock" fi eend $? "Errors were encountered while stopping fcgiwrap process..." }
Som du kan se, indeholder scriptfilen to variabler i starten henholdsvis ip og port . Skift disse variabler efter dine egne behov, og sørg for at de ikke overlapper andre tjenester på dit system, især portvariabel - standard her er 12345 - skift i overensstemmelse hermed.
Brug af 0.0.0.0 på IP-variabel gør det muligt for processen at binde og lytte på enhver IP (udenfor tilgængelig, hvis du ikke har en firewall), men af sikkerhedsmæssige årsager skal du ændre den for kun at lytte lokalt, på 127.0.0.1 , medmindre du har andre grunde som at eksternt opsætte Fcgiwrap gateway på en anden node til ydeevne eller belastningsbalancering.
3. Når filen er oprettet, skal du tilføje udførelsestilladelser og administrere dæmonprocessen ved hjælp af start-, stop- eller statusomskiftere. Statusomskifteren viser dig relevante stikkontaktoplysninger såsom IP-PORT par, det lytter, og hvis en aktiv forbindelse blev initialiseret. Hvis processen også har aktive forbindelser i tilstanden TIME_WAIT , kan du ikke genstarte den, før alle TCP-forbindelser lukkes.
# chmod +x /etc/init.d/fcgiwrap # service start fcgiwrap # /etc/init.d/fcgiwrap status
Som tidligere præsenteret kan Fcgiwrap køre samtidigt ved hjælp af begge sokler, så det vil ændre navnet på det andet script let til fcgiwrap-unix-sokkel for at sikre, at begge kan startes og køres på samme tid.
# nano /etc/init.d/fcgiwrap-unix-socket
Brug følgende filindhold til UNIX-stikket.
#!/sbin/runscript sock_detail=`ps a | grep fcgiwrap-unix | head -1` start() { ebegin "Starting fcgiwrap-unix-socket process..." /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.sock` echo "Socket details: $sock" eend $? "Errors were encountered while starting fcgiwrap process" } stop() { ebegin "Stopping fcgiwrap-unix-socket process..." pid=`ps a | grep fcgiwrap | grep unix | cut -d" " -f1` rm -f /run/fcgiwrap-unix.sock kill -s 1 $pid echo "Fcgiwrap process successfully stoped" #killall /usr/sbin/fcgiwrap sleep 1 echo "Socket details: $sock" eend $? "Errors were encountered while stopping fcgiwrap process..." } status() { ebegin "Status fcgiwrap-unix-socket process..." if test -S /run/fcgiwrap-unix.sock; then echo "Process is started with socket: $sock_detail" else echo "Fcgiwrap process not running!" fi eend $? "Errors were encountered while stopping fcgiwrap process..." }
4. Sørg igen for, at denne fil er eksekverbar, og brug de samme servicekontakter: start , stop eller status . Jeg har indstillet standardstien til dette stik på /run/fcgiwrap-unix.sock systemstien. Start processen og kontroller den ved hjælp af status switch eller liste /kør katalogindhold, og find stikket, eller brug ps -a | grep fcgiwrap kommando.
# chmod +x /etc/init.d/fcgiwrap-unix-socket # service start fcgiwrap-unix-socket # /etc/init.d/fcgiwrap-unix-socket status # ps -a | grep fcgiwrap
Som tidligere nævnt kan Fcgiwrap køre med både TCP- og UNIX-sockets samtidigt, men hvis du ikke har brug for eksterne gatewayforbindelser, skal du kun holde dig til Unix Domain Socket , fordi den bruger interprocess-kommunikation, som er hurtigere end kommunikation over TCP loopback-forbindelser og bruger mindre TCP-overhead.
Trin 2: Aktivér CGI-scripts på Nginx
5. For at Nginx skal parse og køre Perl- eller Bash-scripts via Fast Common Gateway-interface, skal virtuelle værter konfigureres med Fcgiwrap-definitioner på rodstier eller placeringsangivelser.
Nedenfor vises et eksempel (localhost), der aktiverer Perl- og CGI-scripts på alle filer placeret i rodstien (/var/www/localhost/htdocs/) med .pl og .cgi udvidelse ved hjælp af Fcgiwrap TCP-sokler til standard roddokumentsti, den anden placering ved hjælp af Unix Domain Sockets med en index.pl fil og den tredje placering bruger TCP-sockets med en index.cgi fil.
Placer følgende indhold, eller bare nogle dele af det, til den ønskede Virtual Host-konfigurationsfil, du vil aktivere dynamiske Perl- eller Bash-scripts med UNIX- eller TCP-sokler under forskellige placeringer ved at ændre fastcgi_pass argumenterklæring.
# nano /etc/nginx/sites-available/localhost.conf
Rediger localhost.conf for at se ud i skabelonen nedenfor.
server { listen 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/; location / { autoindex on; index index.html index.htm index.php; } ## PHP –FPM Gateway ### location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:9001; } ## Fcgiwrap Gateway on all files under root with TCP Sockets### location ~ \.(pl|cgi|rb)$ { fastcgi_index index.cgi index.pl; include /etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:12345; } ## Fcgiwrap Gateway on all files under root second folder with index.pl using UNIX Sockets### location /second { index index.pl; root /var/www/localhost/htdocs/; location ~ \.(pl|cgi|rb)$ { include /etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/fcgiwrap-unix.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ## Fcgiwrap Gateway on all files under root third folder with index.cgi using TCP Sockets### location /third { index index.cgi; location ~ \.(pl|cgi|rb)$ { include /etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:12345; } }
6. Når du er færdig med at redigere Nginx localhost.conf eller din specifikke Virtual Host-konfigurationsfil, skal du flytte til dit websteds standarddokumentrodsti, oprette disse to mapper for at afspejle din placeringserklæring og oprette indeksfiler til hvert sted med dets specifikke udvidelse.
# cd /var/www/localhost/htdocs # mkdir second third
Opret index.pl fil på anden placering med følgende indhold.
# nano /var/www/localhost/htdocs/second/index.pl
Tilføj dette indhold for at få miljøvariabler.
#!/usr/bin/perl print "Content-type: text/html\n\n"; print <<HTML; <html> <head><title>Perl Index</title></head> <body> <div align=center><h1>A Perl CGI index on second location with env variables</h1></div> </body> HTML print "Content-type: text/html\n\n"; foreach my $keys (sort keys %ENV) { print "$keys = $ENV{$keys}<br/>\n"; } exit;
Opret derefter index.cgi fil på tredje placering med følgende indhold.
# nano /var/www/localhost/htdocs/third/index.cgi
Tilføj dette indhold for at få miljøvariabler.
#!/bin/bash echo Content-type: text/html echo "" cat << EOF <HTML> <HEAD><TITLE>Bash script</TITLE></HEAD> <BODY><PRE> <div align=center><h1>A BASH CGI index on third location with env variables</h1></div> EOF env cat << EOF </BODY> </HTML> EOF
7. Når du er færdig med at redigere, skal du gøre begge filer eksekverbare, genstarte Nginx-serveren og sørge for, at begge Fcgiwrap-sokler kører.
# chmod +x /var/www/localhost/htdocs/second/index.pl # chmod +x /var/www/localhost/htdocs/third/index.cgi # service nginx restart # service fcgiwrap start # service fcgiwrap-unix-socket start
Derefter omdirigerer du din lokale browser til følgende URL.
http://localhost http://localhost/second/ http://localhost/third/
Resultatet skal vises som på nedenstående skærmbilleder.
8. Hvis alt er på plads og korrekt konfigureret, skal begge Fcgiwrap-dæmoner starte automatisk efter genstart ved at udstede følgende kommandoer (hvis du har konfigureret Nginx til at bruge begge CGI-stik).
# rc-update add fcgiwrap default # rc-update add fcgiwrap-unix-socket default
Trin 3: Aktiver Ruby-support på Fcgiwrap
9. Hvis du har brug for at køre dynamiske Ruby-scripts på Nginx FCGI, skal du installere Ruby tolk på Gentoo med følgende kommando.
# emerge --ask ruby
10. Når pakken er kompileret og installeret, skal du flytte til Nginx sites-available og redigere localhost.conf ved at tilføje følgende udsagn før sidste krøllede parentes “ } ”, som aktiverer understøttelse til at køre Ruby-scripts på en fjerde placering under standarddokumentrodstien, der betjenes af Nginx localhost.
# nano /etc/nginx/sites-available/localhost.conf
Brug følgende Nginx-direktiver.
## Fcgiwrap Gateway on all files under root fourth folder with index.rb under TCP Sockets### location /fourth { index index.rb; location ~ \.rb$ { include /etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:12345; } } ## Last curly bracket which closes Nginx server definitions ## }
11. For at teste konfigurationen skal du oprette den fjerde mappe under /var/www/localhost/htdocs sti, skal du oprette et eksekverbart Ruby-indeks script med .rb udvidelse og tilføje følgende indhold.
# mkdir /var/www/localhost/htdocs/fourth # nano /var/www/localhost/htdocs/fourth/index.rb
Rubin index.rb eksempel.
#!/usr/bin/ruby puts "HTTP/1.0 200 OK" puts "Content-type: text/html\n\n" puts "<html><HEAD><TITLE>Ruby script</TITLE></HEAD>" puts "<BODY><PRE>" puts "<div align=center><h1>A Ruby CGI index on fourth location with env variables</h1></div>" system('env')
12. Når du har tilføjet eksekveringstilladelser til filen, skal du genstarte Nginx-dæmonen for at anvende konfigurationer.
# chmod +x /var/www/localhost/htdocs/fourth/index.rb # service nginx restart
Åbn din browser, og naviger til URL'en http:/localhost/4th/, som skal præsentere dig for følgende indhold.
Det er det for nu, du har konfigureret Nginx til at tjene dynamiske Perl-, Ruby- og Bash-scripts på FastCGI Gateway, men vær opmærksom på, at det at køre denne form for fortolkede scripts på Nginx CGI Gateway kan være farligt og pålægge din server alvorlige sikkerhedsrisici, fordi de køre ved hjælp af aktive skaller under dit system, men kan udvide statisk barriere pålagt af statisk HTML, tilføje dynamisk funktionalitet til dit websted.