Instaliranje FcgiWrap i omogućavanje Perl, Ruby i Bash dinamičkih jezika na Gentoo LEMP
Ovaj vodič je usko povezan s prethodnim o instalaciji LEMP-a na Gentoo i tretira druge proširene probleme poslužitelja kao što je omogućavanje dinamičkih skriptnih jezika kao što su Perl ili Bash ili Ruby putem Fcgiwrap pristupnika i uređivanje Nginx virtualnih hostova konfiguracijskih datoteka za posluživati dinamički sadržaj koristeći .pl, .rb i .cgi skripte.
Zahtjevi
- LEMP stog instaliran na Gentoo – https://linux-console.net/install-lemp-in-gentoo-linux/
Korak 1: Omogućite FCGIWRAP na Gentoo LEMP
Fcgiwrap je dio Nginx FastCGI Common Gateway Interface koji obrađuje druge dinamičke skriptne jezike, kao što su Perl ili Bash ili Ruby skripte, funkcionira tako što obrađuje zahtjeve primljene od Nginxa, putem TCP-a ili Unix Sockets, na neovisni način i vraća proizvedeni rezultat natrag u Nginx, koji će, u konačnici, proslijediti odgovore krajnjim klijentima.
1. Prvo počnimo s instaliranjem procesa FCcgiwrap na Gentoo Linux pomoću sljedeće naredbe.
emerge --ask www-misc/fcgiwrap
2. Prema zadanim postavkama Fcgiwrap paket ne nudi nikakvu init skriptu na Gentoou za upravljanje procesom. Nakon što su paketi kompajlirani i instalirani, stvorite sljedeće init skripte koje vam pomažu upravljati Fcgiwrap procesom korištenjem tri pristupa: ili pokretanje procesa korištenjem Unix Domain Sockets ili korištenjem lokalnog < b>TCP utičnice ili koristeći oboje u isto vrijeme.
Korištenje TCP Socket skripte
Napravite init datoteku na /etc/init.d/ stazi sa sljedećim sadržajem datoteke.
nano /etc/init.d/fcgiwrap
Dodajte sljedeći sadržaj datoteke.
#!/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..."
}
Kao što vidite, datoteka skripte sadrži dvije varijable na početku, odnosno ip i port. Promijenite ove varijable u skladu sa svojim potrebama i pobrinite se da se ne preklapaju s drugim uslugama na vašem sustavu, posebno s varijablom porta – zadana je ovdje 12345 – promijenite u skladu s tim.
Korištenje 0.0.0.0 na IP varijabli omogućuje procesu vezanje i slušanje na bilo kojem IP-u (dostupan izvana ako nemate vatrozid), ali iz sigurnosnih razloga trebali biste ga promijeniti da sluša samo lokalno, na 127.0.0.1, osim ako nemate druge razloge poput daljinskog postavljanja Fcgiwrap pristupnika na drugom čvoru radi performansi ili uravnoteženja opterećenja.
3. Nakon što je datoteka stvorena, dodajte dozvole za izvršavanje i upravljajte procesom demona pomoću prekidača za pokretanje, zaustavljanje ili status. Prekidač statusa pokazat će vam relevantne informacije o utičnici kao što je IP-PORT par koji sluša i je li neka aktivna veza inicijalizirana. Također, ako proces ima aktivne veze u stanju TIME_WAIT, ne možete ga ponovno pokrenuti dok se sve TCP veze ne zatvore.
chmod +x /etc/init.d/fcgiwrap
service start fcgiwrap
/etc/init.d/fcgiwrap status
Korištenje Unix Socket skripte
Kao što je ranije predstavljeno, Fcgiwrap se može izvoditi istovremeno koristeći obje utičnice, tako da će malo promijeniti naziv druge skripte u fcgiwrap-unix-socket, kako bi se osiguralo da se obje mogu pokrenuti i pokrenuti u isto vrijeme.
nano /etc/init.d/fcgiwrap-unix-socket
Koristite sljedeći sadržaj datoteke za UNIX utičnicu.
#!/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. Ponovno se uvjerite da je ova datoteka izvršna i koristite iste prekidače usluge: start, stop ili status. Postavio sam zadanu stazu za ovu utičnicu na /run/fcgiwrap-unix.sock put sustava. Pokrenite proces i provjerite ga korištenjem prekidača status ili popis sadržaja direktorija /run i locirajte utičnicu ili koristite ps -a | naredba grep fcgiwrap.
chmod +x /etc/init.d/fcgiwrap-unix-socket
service start fcgiwrap-unix-socket
/etc/init.d/fcgiwrap-unix-socket status
ps -a | grep fcgiwrap
Kao što je ranije spomenuto, Fcgiwrap može raditi i s TCP i UNIX utičnicama istovremeno, ali ako ne trebate veze s vanjskim pristupnikom držite se samo Unix Domain Socket, jer koristi međuprocesnu komunikaciju, koja je brža od komunikacije preko TCP povratne veze i koristi manje TCP opterećenja.
Korak 2: Omogućite CGI skripte na Nginxu
5. Da bi Nginx raščlanjivao i pokretao Perl ili Bash skripte kroz sučelje Fast Common Gateway, virtualni hostovi moraju biti konfigurirani s Fcgiwrap definicijama na root stazi ili izjavama lokacije.
Dolje je prikazan primjer (localhost), koji aktivira Perl i CGI skripte na svim datotekama smještenim u korijenskoj stazi (/var/www/localhost/htdocs/) s .pl i .cgi ekstenzija koja koristi Fcgiwrap TCP utičnice za zadanu stazu korijenskog dokumenta, druga lokacija koja koristi Unix Domain Sockets, s datotekom index.pl a treća lokacija koristi TCP utičnice s datotekom index.cgi.
Postavite sljedeći sadržaj, ili samo neke njegove dijelove, u željenu konfiguracijsku datoteku virtualnog hosta koju želite aktivirati dinamičke Perl ili Bash skripte s UNIX ili TCP utičnicama na različitim lokacijama, mijenjanjem fastcgi_pass izjave argumenta.
nano /etc/nginx/sites-available/localhost.conf
Uredite localhost.conf da izgleda kao u predlošku ispod.
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. Nakon što završite s uređivanjem Nginx localhost.conf ili vaše posebne konfiguracijske datoteke virtualnog hosta, pomaknite se na zadanu stazu korijena dokumenta vaše web stranice, stvorite te dvije mape da odražavaju vašu lokaciju naredbu i stvoriti indeksne datoteke za svaku lokaciju sa svojim posebnim nastavkom.
cd /var/www/localhost/htdocs
mkdir second third
Stvorite datoteku index.pl na drugom mjestu sa sljedećim sadržajem.
nano /var/www/localhost/htdocs/second/index.pl
Dodajte ovaj sadržaj da biste dobili varijable okoline.
#!/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;
Zatim kreirajte datoteku index.cgi na trećem mjestu sa sljedećim sadržajem.
nano /var/www/localhost/htdocs/third/index.cgi
Dodajte ovaj sadržaj da biste dobili varijable okoline.
#!/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. Kada završite s uređivanjem, učinite obje datoteke izvršnima, ponovno pokrenite Nginx poslužitelj i provjerite rade li obje Fcgiwrap utičnice.
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
Zatim preusmjerite svoj lokalni preglednik na sljedeći URL.
http://localhost
http://localhost/second/
http://localhost/third/
Rezultat bi trebao izgledati kao na snimkama zaslona u nastavku.
8. Ako je sve na mjestu i ispravno konfigurirano, omogućite oba Fcgiwrap demona da se automatski pokrenu nakon ponovnog pokretanja izdavanjem sljedećih naredbi (u slučaju da ste konfigurirali Nginx da koristi oba CGI socketa).
rc-update add fcgiwrap default
rc-update add fcgiwrap-unix-socket default
Korak 3: Aktivirajte Ruby podršku na Fcgiwrap
9. Ako trebate pokrenuti dinamičke Ruby skripte na Nginx FCGI, morate instalirati Ruby tumač na Gentoo sa sljedećom naredbom.
emerge --ask ruby
10. Nakon što je paket kompajliran i instaliran, prijeđite na Nginx sites-available i uredite datoteku localhost.conf dodavanjem sljedećih izjava prije zadnja vitičasta zagrada “ } ”, koja aktivira podršku za pokretanje Ruby skripti na četvrtoj lokaciji ispod zadane korijenske staze dokumenta koju poslužuje Nginx lokalni host.
nano /etc/nginx/sites-available/localhost.conf
Koristite sljedeće Nginx upute.
## 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. Sada, za testiranje konfiguracije stvorite četvrti direktorij pod stazom /var/www/localhost/htdocs, izradite izvršnu Ruby skriptu indeksa s .rb proširenje i dodajte sljedeći sadržaj.
mkdir /var/www/localhost/htdocs/fourth
nano /var/www/localhost/htdocs/fourth/index.rb
Ruby index.rb primjer.
#!/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. Nakon što dodate dozvole za izvršavanje datoteci, ponovno pokrenite Nginx demon za primjenu konfiguracija.
chmod +x /var/www/localhost/htdocs/fourth/index.rb
service nginx restart
Otvorite svoj preglednik i idite na URL http://localhost/fourth/, koji bi vam trebao predstaviti sljedeći sadržaj.
To je to za sada, konfigurirali ste Nginx za posluživanje dinamičkih Perl, Ruby i Bash skripti na FastCGI Gatewayu, ali imajte na umu da pokretanje ove vrste interpretiranih skripti na Nginx CGI Gatewayu može biti opasno i predstavljati ozbiljne sigurnosne rizike vašem poslužitelju jer pokrenuti pomoću aktivnih ljuski pod vašim sustavom, ali može proširiti statičku barijeru koju nameće statički HTML, dodajući dinamičku funkcionalnost vašoj web stranici.