Kufunga FcgiWrap na Kuwezesha Lugha za Perl, Ruby na Bash Dynamic kwenye Gentoo LEMP


Mafunzo haya yanahusiana kabisa na yale ya awali kwenye Usakinishaji wa LEMP kwenye Gentoo na hushughulikia masuala mengine yaliyopanuliwa ya seva kama vile kuwezesha lugha zinazobadilika za uandishi kama vile Perl au Bash au Ruby kupitia Fcgiwrap Gateway, na kuhariri faili za usanidi wa Nginx Virtual Hosts ili kutoa maudhui yanayobadilika kwa kutumia .pl, .rb na .cgi hati.

  1. Bunda la LEMP limesakinishwa kwenye Gentoo - https://linux-console.net/install-lemp-in-gentoo-linux/

Hatua ya 1: Washa FCGIWRAP kwenye Gentoo LEMP

Fcgiwrap ni sehemu ya Nginx FastCGI Common Gateway Interface ambayo huchakata lugha nyingine dhabiti za uandishi, kama hati za Perl au Bash au Ruby, hufanya kazi kwa kuchakata maombi yaliyopokelewa kutoka kwa Nginx, kupitia TCP au Soketi za Unix, kwa njia ya kujitegemea na kurudisha matokeo yaliyotolewa kwa Nginx, ambayo, kwa muda, itasambaza majibu kwa wateja wa mwisho.

1. Hebu tuanze kwanza kwa kusakinisha mchakato wa FCcgiwrap kwenye Gentoo Linux kwa kutumia amri ifuatayo.

# emerge --ask www-misc/fcgiwrap

2. Kwa chaguomsingi, kifurushi cha Fcgiwrap hakitoi hati yoyote ya init kwenye Gentoo ili kudhibiti mchakato. Baada ya vifurushi kukusanywa na kusakinishwa unda hati init zifuatazo zinazokusaidia kudhibiti mchakato wa Fcgiwrap kwa kutumia mbinu tatu: ama kuzindua mchakato huo kwa kutumia Unix Domain Sockets au kutumia local b>Soketi za TCPau kutumia zote mbili kwa wakati mmoja.

Unda faili ya init kwenye /etc/init.d/ njia na maudhui yafuatayo ya faili.

# nano /etc/init.d/fcgiwrap

Ongeza yaliyomo kwenye faili ifuatayo.

#!/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..."
}

Kama unavyoweza kuona faili ya hati ina vigezo viwili mwanzoni, mtawalia ip na bandari. Badilisha vigeu hivi na mahitaji yako mwenyewe na uhakikishe haviingiliani na huduma zingine kwenye mfumo wako, haswa utofauti wa mlango - chaguomsingi hapa ni 12345 - badilisha ipasavyo.

Kutumia 0.0.0.0 kwenye utofautishaji wa IP huwezesha mchakato wa kufunga na kusikiliza kwenye IP yoyote (inayoweza kufikiwa nje ikiwa huna ngome ), lakini kwa sababu za kiusalama unapaswa kuibadilisha ili kusikiliza ndani ya nchi pekee, kwenye 127.0.0.1, isipokuwa kama una sababu zingine kama vile kusanidi lango la Fcgiwrap kwa mbali kwenye nodi tofauti ya utendakazi au kusawazisha upakiaji.

3. Baada ya faili kuundwa, ongeza ruhusa za utekelezaji na udhibiti mchakato wa daemon kwa kutumia swichi za kuanza, za kusimamisha au hali. Swichi ya hali itakuonyesha maelezo muhimu ya soketi kama vile IP-PORT kuoanisha inaposikika na ikiwa muunganisho wowote unaotumika unapoanzishwa. Pia, ikiwa mchakato una miunganisho amilifu katika hali ya TIME_WAIT huwezi kuianzisha upya hadi miunganisho yote ya TCP ifunge.

# chmod +x /etc/init.d/fcgiwrap
# service start fcgiwrap
# /etc/init.d/fcgiwrap status

Kama ilivyowasilishwa hapo awali Fcgiwrap inaweza kufanya kazi kwa wakati mmoja kwa kutumia soketi zote mbili, kwa hivyo itabadilisha kidogo jina la hati ya pili kuwa fcgiwrap-unix-socket, ili kuhakikisha kuwa zote mbili zinaweza kuanza na kuendeshwa kwa wakati mmoja.

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

Tumia yaliyomo kwenye faili ifuatayo kwa soketi ya UNIX.

#!/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. Tena hakikisha kwamba faili hii inaweza kutekelezwa na utumie swichi za huduma sawa: anza, acha au hali. Nimeweka njia chaguo-msingi ya tundu hili kwenye /run/fcgiwrap-unix.sock njia ya mfumo. Anzisha mchakato na uithibitishe kwa kutumia hali badilisha au orodhesha /run maudhui ya saraka na utafute tundu, au tumia ps -a | grep fcgiwrapamri.

# chmod +x /etc/init.d/fcgiwrap-unix-socket
# service start fcgiwrap-unix-socket
# /etc/init.d/fcgiwrap-unix-socket status
# ps -a | grep fcgiwrap

Kama ilivyotajwa hapo awali Fcgiwrap inaweza kufanya kazi na soketi zote mbili za TCP na UNIX kwa wakati mmoja, lakini ikiwa hauitaji miunganisho ya lango la nje shikilia kwa Soketi ya Kikoa cha Unix pekee, kwa sababu hutumia mawasiliano ya mwingiliano, ambayo ni haraka kuliko mawasiliano kupita. Miunganisho ya nyuma ya TCP, na hutumia sehemu ndogo ya TCP.

Hatua ya 2: Wezesha Hati za CGI kwenye Nginx

5. Ili Nginx ichanganue na iendeshe hati za Perl au Bash kupitia Kiolesura cha Fast Common Gateway, Wapangishi Pepe lazima zisanidiwe kwa ufafanuzi wa Fcgiwrap kwenye njia ya mizizi au taarifa za eneo.

Mfano, umewasilishwa hapa chini (localhost), ambao huwasha hati za Perl na CGI kwenye faili zote zilizowekwa kwenye njia ya mizizi (/var/www/localhost/htdocs/) na .pl na .cgi kiendelezi kwa kutumia Soketi za Fcgiwrap TCP kwa njia chaguomsingi ya hati, eneo la pili kwa kutumia Soketi za Kikoa cha Unix, pamoja na faili ya index.pl na eneo la tatu linatumia soketi za TCP zilizo na faili ya index.cgi.

Weka maudhui yafuatayo, au baadhi ya sehemu zake, kwa faili yako unayotaka ya usanidi ya Seva Vipengee unayotaka kuamilisha hati tendaji za Perl au Bash na UNIX au Soketi za TCP chini ya maeneo tofauti, kwa kurekebisha fastcgi_pass taarifa ya hoja.

# nano /etc/nginx/sites-available/localhost.conf

Hariri localhost.conf ili kuonekana kama katika kiolezo kilicho hapa chini.

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. Baada ya kumaliza kuhariri Nginx localhost.conf, au faili yako mahususi ya usanidi ya Mpangishaji Mtandaoni, nenda kwenye njia ya msingi ya hati chaguomsingi ya tovuti yako, unda folda hizo mbili ili kuonyesha taarifa ya eneo lako, na uunde faili za faharasa za kila eneo na ugani wake maalum.

# cd /var/www/localhost/htdocs
# mkdir second third

Unda faili ya index.pl kwenye eneo la pili na maudhui yafuatayo.

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

Ongeza maudhui haya ili kupata anuwai za mazingira.

#!/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;

Kisha unda faili ya index.cgi kwenye eneo la tatu na maudhui yafuatayo.

# nano /var/www/localhost/htdocs/third/index.cgi

Ongeza maudhui haya ili kupata anuwai za mazingira.

#!/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. Unapomaliza kuhariri, fanya faili zote mbili kutekelezwa, anzisha upya seva ya Nginx na uhakikishe kuwa soketi zote mbili za Fcgiwrap zinafanya kazi.

# 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

Ifuatayo, elekeza upya kivinjari chako cha ndani kwa kufuata URL.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Matokeo yanapaswa kuonekana kama kwenye picha za skrini zilizo hapa chini.

8. Ikiwa kila kitu kiko mahali na kusanidiwa kwa usahihi, wezesha daemons zote mbili za Fcgiwrap kuanza kiotomatiki, baada ya kuwasha upya kwa kutoa amri zifuatazo (ikiwa umesanidi Nginx kutumia soketi zote mbili za CGI).

# rc-update add fcgiwrap default
# rc-update add fcgiwrap-unix-socket default

Hatua ya 3: Washa usaidizi wa Ruby kwenye Fcgiwrap

9. Ikiwa unahitaji kuendesha hati dhabiti za Ruby kwenye Nginx FCGI lazima usakinishe Ruby mkalimani kwenye Gentoo kwa amri ifuatayo.

# emerge --ask ruby

10. Baada ya kifurushi kukusanywa na kusakinishwa, nenda kwa Nginx tovuti zinazopatikana na uhariri faili ya localhost.conf kwa kuambatanisha taarifa zifuatazo kabla ya mabano yaliyopinda ya mwisho \ } ”, ambayo huwasha usaidizi wa kuendesha hati za Ruby kwenye eneo la nne chini ya njia ya msingi ya hati inayohudumiwa na Nginx localhost.

# nano /etc/nginx/sites-available/localhost.conf

Tumia maagizo yafuatayo ya Nginx.

## 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. Sasa, ili kujaribu usanidi unda saraka ya nne chini ya /var/www/localhost/htdocs njia, tengeneza hati ya faharasa ya Ruby inayoweza kutekelezeka na kiendelezi cha .rb na uongeze zifuatazo. maudhui.

# mkdir /var/www/localhost/htdocs/fourth
# nano /var/www/localhost/htdocs/fourth/index.rb

Mfano wa ruby index.rb.

#!/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. Baada ya kuongeza ruhusa za utekelezaji kwenye faili, anzisha upya daemon ya Nginx ili kutumia usanidi.

# chmod +x /var/www/localhost/htdocs/fourth/index.rb
# service nginx restart

Fungua kivinjari chako na uende kwenye URL http://localhost/fourth/, ambayo inapaswa kuwasilisha maudhui yafuatayo.

Ndio hivyo kwa sasa, umesanidi Nginx kutumikia maandishi ya Perl, Ruby na Bash kwenye FastCGI Gateway, lakini, fahamu kuwa kuendesha aina hii ya maandishi yaliyofasiriwa kwenye Nginx CGI Gateway inaweza kuwa hatari na kuweka hatari kubwa za usalama kwenye seva yako kwa sababu kukimbia kwa kutumia makombora amilifu chini ya mfumo wako, lakini inaweza kupanua kizuizi tuli kilichowekwa na HTML tuli, na kuongeza utendakazi thabiti kwenye tovuti yako.