FcgiWrap instalēšana un Perl, Ruby un Bash dinamisko valodu iespējošana Gentoo LEMP
Šī apmācība ir cieši saistīta ar iepriekšējo LEMP instalēšanas programmu Gentoo, un tajā tiek aplūkoti citi servera paplašināti jautājumi, piemēram, dinamisko skriptu valodu, piemēram, Perl vai Bash vai Ruby, iespējošana, izmantojot Fcgiwrap Gateway, un rediģēšana Nginx Virtual Hosts konfigurācijas failos, lai kalpotu dinamiskam saturam, izmantojot .pl , .rb un .cgi skripti.
- Gentoo instalēta LEMP kaudze - https://linux-console.net/install-lemp-in-gentoo-linux/
1. darbība: iespējojiet FCGIWRAP vietnē Gentoo LEMP
Fcgiwrap ir daļa no Nginx FastCGI Common Gateway Interface , kas apstrādā citas dinamisko skriptu valodas, piemēram, Perl, Bash vai Ruby skriptus, darbojas, apstrādājot no Nginx saņemtos pieprasījumus, izmantojot TCP vai Unix Sockets patstāvīgi atgriež iegūto rezultātu atpakaļ Nginx, kas laika gaitā atbildes nosūtīs atpakaļ gala klientiem.
1. Vispirms sāksim instalēt procesu FCcgiwrap Gentoo Linux, izmantojot šādu komandu.
# emerge --ask www-misc/fcgiwrap
2. Pēc noklusējuma Fcgiwrap pakotne Gentoo nesniedz init skriptus procesa pārvaldībai. Pēc pakotņu apkopošanas un instalēšanas izveidojiet šādus init skriptus, kas palīdz pārvaldīt Fcgiwrap procesu, izmantojot trīs pieejas: vai nu palaižot procesu, izmantojot Unix domēna ligzdas vai izmantojot vietējo < b> TCP ligzdas vai vienlaikus izmantojat abas.
Izveidojiet init failu ceļā /etc/init.d/ ar šādu faila saturu.
# nano /etc/init.d/fcgiwrap
Pievienojiet šādu faila saturu.
#!/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..." }
Kā redzat, skripta faila sākumā ir divi mainīgie, attiecīgi ip un ports . Mainiet šos mainīgos atbilstoši savām vajadzībām un pārliecinieties, ka tie nepārklājas ar citiem jūsu sistēmas pakalpojumiem, īpaši ar porta mainīgo - šeit noklusējums ir 12345 - attiecīgi mainiet.
0.0.0.0 izmantošana IP mainīgajā ļauj procesam sasaistīties un klausīties jebkurā IP (ārpus piekļuves, ja jums nav ugunsmūra), taču drošības apsvērumu dēļ jums tas jāmaina, lai klausītos tikai lokāli, uz 127.0.0.1 , ja vien jums nav citu iemeslu, piemēram, attālināti iestatīt Fcgiwrap vārteju citā mezglā veiktspējas vai slodzes līdzsvarošanai.
3. Pēc faila izveides pievienojiet izpildes atļaujas un pārvaldiet dēmona procesu, izmantojot starta, apturēšanas vai statusa slēdžus. Statusa slēdzis parādīs atbilstošu kontaktligzdas informāciju, piemēram, IP-PORT pārī, kuru tas klausās, un, ja ir aktīvs savienojums, tas tika inicializēts. Turklāt, ja procesam ir aktīvi savienojumi stāvoklī TIME_WAIT , to nevar restartēt, kamēr visi TCP savienojumi nav aizvērti.
# chmod +x /etc/init.d/fcgiwrap # service start fcgiwrap # /etc/init.d/fcgiwrap status
Kā tika parādīts iepriekš, Fcgiwrap var darboties vienlaikus, izmantojot abas ligzdas, tāpēc nedaudz mainīs otrā skripta nosaukumu uz fcgiwrap-unix-socket , lai nodrošinātu, ka abus var startēt un palaist vienlaicīgi.
# nano /etc/init.d/fcgiwrap-unix-socket
UNIX ligzdai izmantojiet šādu faila saturu.
#!/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. Vēlreiz pārliecinieties, ka šis fails ir izpildāms, un izmantojiet tos pašus pakalpojumu slēdžus: start , stop vai status . Esmu iestatījis šīs kontaktligzdas noklusējuma ceļu uz /run/fcgiwrap-unix.sock sistēmas ceļa. Sāciet procesu un pārbaudiet to, izmantojot statusa slēdzi vai sarakstu /palaist direktorija saturu un atrodiet kontaktligzdu vai izmantojiet ps -a | grep fcgiwrap komanda.
# chmod +x /etc/init.d/fcgiwrap-unix-socket # service start fcgiwrap-unix-socket # /etc/init.d/fcgiwrap-unix-socket status # ps -a | grep fcgiwrap
Kā jau iepriekš minēts, Fcgiwrap var darboties gan ar TCP, gan UNIX ligzdām vienlaicīgi, taču, ja ārējie vārtejas savienojumi nav nepieciešami, palieciet tikai pie Unix domēna ligzdas , jo tā izmanto starpprocesu komunikāciju, kas ir ātrāka nekā komunikācija TCP atgriezeniskās saites savienojumi un tiek izmantots mazāk TCP pieskaitāmo izmaksu.
2. darbība: iespējojiet CGI skriptus Nginx
5. Lai Nginx varētu parsēt un palaist Perl vai Bash skriptus, izmantojot Fast Common Gateway Interface, virtuālajiem saimniekiem jābūt konfigurētiem ar Fcgiwrap definīcijām saknes ceļa vai atrašanās vietas paziņojumos.
Zemāk ir sniegts piemērs (localhost), kas aktivizē Perl un CGI skriptus visiem failiem, kas ievietoti saknes ceļā (/var/www/localhost/htdocs/) ar .pl un .cgi paplašinājums, izmantojot noklusējuma saknes dokumenta ceļu, izmantojot Fcgiwrap TCP ligzdas, otrā vieta, izmantojot Unix domēna ligzdas , ar failu index.pl un trešajā vietā tiek izmantotas TCP ligzdas ar failu index.cgi .
Novietojiet šo saturu vai tikai dažas tā daļas vēlamajā virtuālā resursdatora konfigurācijas failā, kurā vēlaties aktivizēt dinamiskos Perl vai Bash skriptus ar UNIX vai TCP ligzdām dažādās vietās, modificējot argumentu fastcgi_pass .
# nano /etc/nginx/sites-available/localhost.conf
Rediģējiet vietni localhost.conf , lai izskatās šādi.
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. Kad esat pabeidzis rediģēt Nginx localhost.conf vai konkrēto virtuālā resursdatora konfigurācijas failu, pārejiet uz vietnes noklusējuma dokumenta saknes ceļu, izveidojiet šīs divas mapes, lai atspoguļotu jūsu atrašanās vietas paziņojumu, un izveidojiet indeksa failus katrā vietā ar konkrētu pagarinājumu.
# cd /var/www/localhost/htdocs # mkdir second third
Izveidojiet failu index.pl otrajā vietā ar šādu saturu.
# nano /var/www/localhost/htdocs/second/index.pl
Pievienojiet šo saturu, lai iegūtu vides mainīgos.
#!/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;
Pēc tam trešajā vietā izveidojiet failu index.cgi ar šādu saturu.
# nano /var/www/localhost/htdocs/third/index.cgi
Pievienojiet šo saturu, lai iegūtu vides mainīgos.
#!/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. Pabeidzot rediģēšanu, padariet abus failus izpildāmus, restartējiet Nginx serveri un pārliecinieties, vai darbojas abas Fcgiwrap ligzdas.
# 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
Pēc tam novirziet vietējo pārlūkprogrammu uz šādu URL.
http://localhost http://localhost/second/ http://localhost/third/
Rezultātam vajadzētu parādīties tāpat kā zemāk esošajos ekrānuzņēmumos.
8. Ja viss ir vietā un pareizi konfigurēts, ļaujiet abiem Fcgiwrap dēmoniem automātiski startēt pēc pārstartēšanas, izsniedzot šādas komandas (ja esat konfigurējis Nginx izmantot abas CGI ligzdas).
# rc-update add fcgiwrap default # rc-update add fcgiwrap-unix-socket default
3. solis: aktivizējiet Ruby atbalstu vietnē Fcgiwrap
9. Ja Nginx FCGI ir jāpalaiž dinamiski skripti, Gentoo jāinstalē tulks Ruby ar šādu komandu.
# emerge --ask ruby
10. Pēc pakotnes sastādīšanas un instalēšanas pārejiet uz Nginx vietnes pieejamas un rediģējiet failu localhost.conf , pievienojot šādus apgalvojumus pirms pēdējās cirtainās iekavas “ } ”, kas aktivizē atbalstu, lai palaistu Ruby skriptus ceturtajā vietā zem noklusējuma dokumenta saknes ceļa, kuru apkalpo Nginx localhost.
# nano /etc/nginx/sites-available/localhost.conf
Izmantojiet šīs Nginx direktīvas.
## 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. Tagad, lai pārbaudītu konfigurāciju, izveidojiet ceturto direktoriju zem ceļa /var/www/localhost/htdocs , izveidojiet izpildāmo Ruby indeksa skriptu ar paplašinājumu .rb un pievienojiet šo: saturu.
# mkdir /var/www/localhost/htdocs/fourth # nano /var/www/localhost/htdocs/fourth/index.rb
Rubīna index.rb piemērs.
#!/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')
Pēc faila izpildes atļauju pievienošanas restartējiet Nginx dēmonu, lai lietotu konfigurācijas.
# chmod +x /var/www/localhost/htdocs/fourth/index.rb # service nginx restart
Atveriet pārlūkprogrammu un pārejiet uz vietrādi URL http:// localhost/ceturtais/, kuram jāparāda šāds saturs.
Tagad tas ir viss, jūs esat konfigurējis Nginx kalpot dinamiskiem Perl, Ruby un Bash skriptiem FastCGI Gateway, taču ņemiet vērā, ka šāda veida interpretētu skriptu palaišana Nginx CGI Gateway var būt bīstama un radīt nopietnus drošības riskus jūsu serverim, jo tie palaist, izmantojot aktīvās čaulas zem jūsu sistēmas, bet var paplašināt statisko barjeru, ko nosaka statiskais HTML, pievienojot jūsu vietnei dinamisku funkcionalitāti.