Fifi FcgiWrap ati Muu ṣiṣẹ Perl, Ruby ati Bash Awọn ede Idagbasoke lori Gentoo LEMP


Ikẹkọ yii ni ibatan pẹkipẹki ọkan atijọ lori fifi sori LEMP lori Gentoo ati ṣe itọju awọn ọrọ ti o gbooro sii olupin bii muu awọn ede kikọ afọwọkọ lagbara bi Perl tabi Bash tabi Ruby nipasẹ Fcgiwrap Gateway, ati satunkọ awọn faili iṣeto Awọn ogun Nginx Virtual lati ṣe iranṣẹ akoonu agbara ni lilo .pl , .rb ati awọn iwe afọwọkọ .cgi .

  1. LEMP akopọ ti o fi sii lori Gentoo - https://linux-console.net/install-lemp-in-gentoo-linux/

Igbesẹ 1: Jeki FCGIWRAP lori Gentoo LEMP

Fcgiwrap jẹ apakan ti Nginx FastCGI Interfaceway Interface eyiti o ṣe ilana awọn ede afọwọkọ ti o ni agbara miiran, bii Perl tabi Bash tabi awọn iwe afọwọkọ Ruby, ṣiṣẹ nipasẹ awọn ibeere ṣiṣe ti a gba lati Nginx, nipasẹ TCP tabi Awọn Socket Unix, ni ọna ominira ati dapada abajade ti a ṣe pada si Nginx, eyiti, ni ọrọ, yoo mu awọn esi siwaju siwaju si awọn alabara ipari.

1. Jẹ ki a kọkọ bẹrẹ nipa fifi sori ẹrọ FCcgiwrap ilana lori Gentoo Linux nipa lilo pipaṣẹ atẹle.

# emerge --ask www-misc/fcgiwrap

2. Nipa aiyipada package Fcgiwrap ko pese eyikeyi init awọn iwe afọwọkọ lori Gentoo lati ṣakoso ilana naa. Lẹhin ti a ti ṣajọ ati ti fi awọn akopọ sii ṣẹda awọn iwe afọwọkọ wọnyi init ti o ṣe iranlọwọ fun ọ lati ṣakoso ilana Fcgiwrap nipa lilo ọna mẹta: boya ṣe ifilọlẹ ilana nipa lilo Awọn apo-iwe Unix Unix tabi lilo agbegbe < b> Awọn Sockets TCP tabi lilo mejeeji ni akoko kanna.

Ṣẹda faili init lori ọna /etc/init.d/ pẹlu akoonu faili atẹle.

# nano /etc/init.d/fcgiwrap

Ṣafikun akoonu faili atẹle.

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

Bi o ṣe le wo faili faili afọwọkọ mu oniyipada meji ni ibẹrẹ, lẹsẹsẹ ip ati ibudo . Yi awọn oniyipada yii pada pẹlu awọn iwulo tirẹ ati rii daju pe wọn ko ni lqkan pẹlu awọn iṣẹ miiran lori eto rẹ, paapaa iyipada ibudo - aiyipada nibi ni 12345 - yipada ni ibamu.

Lilo 0.0.0.0 lori oniyipada IP n jẹ ki ilana lati di ati tẹtisi lori eyikeyi IP (iraye si ita ti o ko ba ni ogiriina kan), ṣugbọn fun awọn idi aabo o yẹ ki o yipada rẹ lati tẹtisi ni agbegbe nikan, lori 127.0.0.1 , ayafi ti o ba ni awọn idi miiran bii ọna ẹrọ Fcgiwrap latọna jijin lori oju ipade ti o yatọ fun iṣẹ tabi iwọntunwọnsi fifuye.

3. Lẹhin ti a ṣẹda faili, fi awọn igbanilaaye ipaniyan ati ṣakoso ilana daemon nipa lilo ibẹrẹ, da duro tabi awọn iyipada ipo. Iyipada ipo yoo fihan ọ alaye iho ti o yẹ gẹgẹbi IP-PORT ṣe alawẹ-meji ti o tẹtisi ati ti eyikeyi asopọ ti nṣiṣe lọwọ nibiti o ti bẹrẹ. Pẹlupẹlu, ti ilana naa ba ni awọn isopọ ti nṣiṣe lọwọ ni ipinlẹ TIME_WAIT o ko le tun bẹrẹ titi gbogbo awọn isopọ TCP yoo fi sunmọ.

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

Gẹgẹbi a ti gbekalẹ tẹlẹ Fcgiwrap le ṣiṣẹ ni igbakanna ni lilo awọn iho mejeji, nitorinaa yoo yi orukọ akọọlẹ pada diẹ si fcgiwrap-unix-soket , lati rii daju pe awọn mejeeji le bẹrẹ ati ṣiṣe ni akoko kanna.

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

Lo akoonu faili atẹle fun iho 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. Lẹẹkansi ṣe idaniloju pe faili yii ṣee ṣiṣẹ ati lo awọn iyipada iṣẹ kanna: bẹrẹ , da tabi ipo . Mo ti ṣeto ọna aiyipada fun iho yii lori ọna eto /run/fcgiwrap-unix.sock . Bẹrẹ ilana naa ki o ṣayẹwo rẹ ni lilo ipo iyipada tabi atokọ /run akoonu itọsọna ati wa iho, tabi lo ps -a | grep fcgiwrap pipaṣẹ.

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

Gẹgẹbi a ti sọ tẹlẹ Fcgiwrap le ṣiṣẹ pẹlu awọn mejeeji TCP ati awọn iho UNIX nigbakanna, ṣugbọn ti o ko ba nilo awọn asopọ ẹnu-ọna ita lati faramọ Unix Domain Socket nikan, nitori o nlo ibaraẹnisọrọ sisẹ, eyiti o yara ju ibaraẹnisọrọ lọ Awọn asopọ loopback TCP, ati pe o lo ori TCP kere ju.

Igbese 2: Jeki Awọn iwe afọwọkọ CGI lori Nginx

5. Fun Nginx lati ṣe itupalẹ ati ṣiṣe awọn iwe afọwọkọ Perl tabi Bash nipasẹ Ọlọpọọmídíà Ẹnubode Gboye, Awọn Alejo Foju gbọdọ wa ni tunto pẹlu awọn itumọ Fcgiwrap lori ọna gbongbo tabi awọn alaye ipo.

Apeere kan, ti gbekalẹ ni isalẹ (localhost), eyiti o mu awọn iwe afọwọkọ Perl ati CGI ṣiṣẹ lori gbogbo awọn faili ti a gbe sinu ọna gbongbo (/var/www/localhost/htdocs/) pẹlu .pl ati .cgi itẹsiwaju nipa lilo awọn Sockets Fcgiwrap TCP fun ọna iwe akọọlẹ aiyipada, ipo keji ni lilo Unix Domain Sockets , pẹlu faili index.pl ati ipo kẹta ni lilo awọn sockets TCP pẹlu faili index.cgi .

Fi akoonu atẹle si, tabi diẹ ninu awọn apakan rẹ, si faili iṣeto iṣeto Alejo fojuhan ti o fẹ ti o fẹ mu muu ṣiṣẹ Perl tabi awọn iwe afọwọkọ Bash ṣiṣẹ pẹlu UNIX tabi Awọn Soceti TCP labẹ awọn ipo oriṣiriṣi, nipa ṣiṣatunṣe fastcgi_pass ariyanjiyan ariyanjiyan.

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

Ṣatunkọ localhost.conf lati wo ni awoṣe ni isalẹ.

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. Lẹhin ti o pari ṣiṣatunkọ Nginx localhost.conf , tabi faili iṣeto-ogun Virtual rẹ pato, gbe si ọna ipilẹ iwe aṣẹ aiyipada aaye ayelujara rẹ, ṣẹda awọn folda meji wọnyẹn lati fi irisi alaye ipo rẹ, ati ṣẹda awọn faili atọka fun gbogbo ipo pẹlu itẹsiwaju rẹ pato.

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

Ṣẹda faili index.pl ni ipo keji pẹlu akoonu atẹle.

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

Ṣafikun akoonu yii lati gba awọn oniyipada ayika.

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

Lẹhinna ṣẹda index.cgi faili ni ipo kẹta pẹlu akoonu atẹle.

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

Ṣafikun akoonu yii lati gba awọn oniyipada ayika.

#!/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. Nigbati o ba pari ṣiṣatunkọ, jẹ ki awọn faili mejeeji ṣee ṣiṣẹ, tun bẹrẹ olupin Nginx ki o rii daju pe awọn iho Fcgiwrap mejeeji nṣiṣẹ.

# 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

Nigbamii, ṣe atunṣe aṣawakiri ti agbegbe rẹ lori URL atẹle.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Abajade yẹ ki o han bi lori awọn sikirinisoti ni isalẹ.

8. Ti ohun gbogbo ba wa ni ipo ti o tunto ni tito, mu awọn daemons Fcgiwrap mejeeji ṣiṣẹ lati bẹrẹ laifọwọyi, lẹhin atunbere nipa ipinfunni awọn ofin wọnyi (ti o ba tunto Nginx lati lo awọn iho CGI mejeeji).

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

Igbesẹ 3: Mu atilẹyin Ruby ṣiṣẹ lori Fcgiwrap

9. Ti o ba nilo lati ṣiṣẹ awọn iwe afọwọkọ Ruby ti o ni agbara lori Nginx FCGI o gbọdọ fi sori ẹrọ Ruby onitumọ lori Gentoo pẹlu aṣẹ atẹle.

# emerge --ask ruby

10. Lẹhin ti o ti ṣajọ ati ti fi sii package, gbe si Nginx awọn aaye-to wa ati ṣatunkọ localhost.conf faili nipa fifi awọn ọrọ wọnyi sii ṣaaju iṣaaju akọmọ akọmọ to kẹhin \"}" , eyiti o mu atilẹyin ṣiṣẹ lati ṣiṣe awọn iwe afọwọkọ Ruby lori ipo kẹrin labẹ ọna gbongbo iwe aṣẹ aiyipada ti o ṣiṣẹ nipasẹ Nginx localhost.

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

Lo awọn itọsọna Nginx wọnyi.

## 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. Nisisiyi, lati ṣe idanwo iṣeto ti o ṣẹda itọsọna kẹrin labẹ ọna /var/www/localhost/htdocs , ṣẹda iwe afọwọkọ Ruby ti a le ṣiṣẹ pẹlu itẹsiwaju .rb ki o ṣafikun atẹle naa akoonu.

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

Ruby index.rb apẹẹrẹ.

#!/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. Lẹhin ti o ṣafikun awọn igbanilaaye ipaniyan lori faili, tun bẹrẹ Nginx daemon lati lo awọn atunto.

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

Ṣii ẹrọ aṣawakiri rẹ ki o lọ kiri si URL http:// localhost/kẹrin/, eyiti o yẹ ki o mu akoonu wọnyi wa fun ọ.

Iyẹn ni fun bayi, o ti tunto Nginx lati ṣe iranṣẹ fun awọn iwe afọwọkọ Perl, Ruby ati Bash lori Gateway FastCGI, ṣugbọn, mọ pe ṣiṣe iru awọn iwe afọwọkọ itumọ lori Nginx CGI Gateway le jẹ eewu ati fa awọn eewu aabo pataki lori olupin rẹ nitori wọn ṣiṣe ni lilo awọn ibon nlanla ti n ṣiṣẹ labẹ eto rẹ, ṣugbọn o le faagun idiwọ aimi ti a fi sii nipasẹ HTML aimi, fifi iṣẹ-ṣiṣe agbara si aaye ayelujara rẹ.