FcgiWrap gurmak we Gentoo LEMP-de Perl, Ruby we Baş dinamiki dilleri açmak


Bu gollanma, Gentoo-daky LEMP gurnamasy bilen berk baglanyşyklydyr we Fcgiwrap şlýuzasy arkaly Perl ýa-da Baş ýa-da Ruby ýaly dinamiki skript dillerini açmak we Nginx Wirtual Hosts konfigurasiýa faýllaryny ulanyp dinamiki mazmuna hyzmat etmek ýaly beýleki serwer giňeldilen meselelere seredýär. .pl , .rb we .cgi ýazgylary.

  1. Gentoo-da gurlan LEMP stakasy - https://linux-console.net/install-lemp-in-gentoo-linux/

1-nji ädim: Gentoo LEMP-de FCGIWRAP-y işlediň

Fcgiwrap Perl ýa-da Baş ýa-da Ruby skriptleri ýaly beýleki dinamiki skript dillerini gaýtadan işleýän Nginx FastCGI umumy şlýuz interfeýsiniň bir bölegi, TCP ýa-da Nginx-den alnan haýyşlary gaýtadan işlemek arkaly işleýär. “Unix Sockets” özbaşdak görnüşde we öndürilen netijäni “Nginx” -e gaýtaryp berýär, bu bolsa ahyrky müşderilere jogap iberer.

1. Ilki bilen aşakdaky buýrugy ulanyp, Gentoo Linux-da FCcgiwrap amalyny gurmakdan başlalyň.

# emerge --ask www-misc/fcgiwrap

2. Adaty tertipde Fcgiwrap bukjasy, prosesi dolandyrmak üçin Gentoo-da hiç hili init skriptini üpjün etmeýär. Bukjalar düzülenden we gurlandan soň, üç çemeleşmäni ulanyp, Fcgiwrap amalyny dolandyrmaga kömek edýän aşakdaky init skriptleri dörediň: ýa-da Unix Domain Sockets ulanyp ýa-da ýerli TCP rozetkalary ýa-da ikisini bir wagtda ulanmak.

Aşakdaky faýl mazmuny bilen /etc/init.d/ ýolunda init faýly dörediň.

# nano /etc/init.d/fcgiwrap

Aşakdaky faýl mazmunyny goşuň.

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

Görşüňiz ýaly, skript faýly başynda ip we port iki üýtgeýjini saklaýar. Bu üýtgeýjileri öz islegleriňiz bilen üýtgediň we ulgamyňyzdaky beýleki hyzmatlar bilen gabat gelmeýändigine göz ýetiriň, esasanam port üýtgeýjisi - bu ýerde deslapky 12345 - şoňa görä üýtgediň.

IP üýtgeýjisinde 0.0.0.0 ulanmak islendik IP-ni baglamaga we diňlemäge mümkinçilik berýär (gorag diwary ýok bolsa daşardan girip bolýar), ýöne howpsuzlyk sebäpli ony diňe ýerli diňlemek üçin üýtgetmeli, öndürijilik ýa-da ýük balansy üçin başga düwünde Fcgiwrap şlýuzasyny uzakdan gurnamak ýaly başga sebäpleriňiz bolmasa, 127.0.0.1 -da.

3. Faýl döredilenden soň, ýerine ýetiriş rugsatlaryny goşuň we başlangyç, durmak ýa-da ýagdaý wyklýuçatellerini ulanyp, daemon prosesini dolandyryň. Switchagdaý wyklýuçateli, diňleýän jübüti we IP-PORT ýaly rozetka maglumatlary we başlanan ýerinde haýsydyr bir işjeň baglanyşyk görkezer. Şeýle hem, bu amalda TIME_WAIT ýagdaýynda işjeň baglanyşyk bar bolsa, ähli TCP birikmeleri ýapylýança ony täzeden açyp bilmersiňiz.

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

Ozal görkezilişi ýaly, Fcgiwrap iki rozetkany ulanyp bir wagtda işledip biler, şonuň üçin ikisiniň hem başlamagynyň we şol bir wagtyň özünde işledilmegini üpjün etmek üçin ikinji skriptiň adyny birneme üýtgeder fcgiwrap-unix-socket .

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

UNIX rozetkasy üçin aşakdaky faýl mazmunyny ulanyň.

#!/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. Bu faýlyň ýerine ýetirilip bilinjekdigine we şol bir hyzmat wyklýuçatellerinden peýdalanyň: başlamak , durmak ýa-da ýagdaýy . Bu rozetka üçin deslapky ýoly /run/fcgiwrap-unix.sock ulgam ýolunda goýdum. Amaly başlaň we ýagdaýy wyklýuçatelini ýa-da /işletmek katalog mazmunyny ulanyp, rozetkany tapyň ýa-da ps -a | ulanyň grep fcgiwrap buýrugy.

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

Ozal bellenip geçilişi ýaly, Fcgiwrap TCP we UNIX rozetkalary bilen bir wagtda işledip biler, ýöne daşarky şlýuz birikmeleri zerur bolmasa, diňe Unix Domain Socket ýapyşyň, sebäbi aragatnaşygyň aragatnaşygyndan has çalt bolan aragatnaşyk aragatnaşygyny ulanýar TCP aýlaw baglanyşyklary we az TCP üstünden ulanýar.

2-nji ädim: Nginx-de CGI skriptlerini işlediň

5. “Nginx” -iň “Çalt umumy şlýuz interfeýsi” arkaly “Perl” ýa-da “Baş” skriptlerini derňemek we işletmek üçin wirtual hostlar kök ýolda ýa-da ýerleşiş jümlelerinde Fcgiwrap kesgitlemeleri bilen düzülmelidir.

Mysal üçin, kök ýoluna (/var/www/localhost/htdocs/) .pl we kök kök resminama ýoly üçin Fcgiwrap TCP Sockets ulanyp, .cgi giňeltmesi, index.pl faýly bolan Unix Domain Sockets ulanýan ikinji ýer. üçünji ýeri bolsa, index.cgi faýly bilen TCP rozetkalary ulanýar.

Aşakdaky mazmuny ýa-da onuň käbir böleklerini, fastcgi_pass argument beýanyny üýtgedip, dürli ýerlerde UNIX ýa-da TCP Sockets bilen dinamiki Perl ýa-da Baş skriptlerini işjeňleşdirmek isleýän Wirtual Host konfigurasiýa faýlyňyza ýerleşdiriň.

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

Aşakdaky şablonda görünmek üçin localhost.conf redaktirläň.

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. Nginx localhost.conf ýa-da ýörite Wirtual Host konfigurasiýa faýlyňyzy redaktirläniňizden soň, web sahypaňyzyň deslapky resminama kök ýoluna geçiň, ýerleşýän ýeriňizi görkezmek üçin şol iki bukjany dörediň we indeks faýllaryny dörediň her bir ýeri, aýratyn giňeltmesi bilen.

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

Aşakdaky mazmun bilen ikinji ýerde index.pl faýly dörediň.

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

Daşky gurşaw üýtgeýänlerini almak üçin bu mazmuny goşuň.

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

Soňra aşakdaky mazmun bilen üçünji ýerde index.cgi faýly dörediň.

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

Daşky gurşaw üýtgeýänlerini almak üçin bu mazmuny goşuň.

#!/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. Redaktirlemäni gutaranyňyzda, iki faýly hem ýerine ýetirip bilersiňiz, Nginx serwerini täzeden açyň we Fcgiwrap rozetkalarynyň ikisiniň hem işleýändigine göz ýetiriň.

# 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

Ondan soň ýerli brauzeriňizi aşakdaky URL-e gönükdiriň.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Netije aşakdaky ekran suratlarynda bolşy ýaly görünmeli.

8. Hemme zat ýerinde bolsa we dogry düzülen bolsa, aşakdaky buýruklary çykaryp (Nginx-i iki CGI rozetkasyny ulanmak üçin düzen bolsaňyz), Fcgiwrap daemonlarynyň ikisini hem awtomatiki başlamaga mümkinçilik beriň.

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

3-nji ädim: Fcgiwrap-da Ruby goldawyny işjeňleşdiriň

9. Nginx FCGI-de dinamiki Ruby skriptlerini işletmeli bolsaňyz, aşakdaky buýruk bilen Gentoo-da Ruby terjimeçisini gurmaly.

# emerge --ask ruby

10. Bukja düzülenden we gurlandan soň, Nginx saýtlary elýeterli -e geçiň we soňky egri ýaýdan öň aşakdaky jümleleri goşup localhost.conf faýly redaktirläň. Nginx localhost tarapyndan hyzmat edilýän deslapky resminama kök ýolunda dördünji ýerde Ruby skriptlerini işletmek üçin goldawy işjeňleşdirýän } .

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

Aşakdaky Nginx görkezmelerini ulanyň.

## 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. Indi konfigurasiýany barlamak üçin /var/www/localhost/htdocs ýolunda dördünji katalogy dörediň, .rb giňeltmesi bilen ýerine ýetirip boljak Ruby indeks skriptini dörediň we aşakdakylary goşuň mazmuny.

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

Ruby index.rb mysal.

#!/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. Faýlda ýerine ýetiriş rugsatlaryny goşanyňyzdan soň, konfigurasiýalary ulanmak üçin Nginx daemonyny täzeden açyň.

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

Brauzeriňizi açyň we aşakdaky mazmuny görkezmeli URL http:// localhost/dördünji/ salgysyna geçiň.

Häzirlikçe, Nginx-i FastCGI şlýuzasynda dinamiki Perl, Ruby we Baş skriptlerine hyzmat etmek üçin düzdüňiz, ýöne Nginx CGI şlýuzasynda şunuň ýaly düşündirilen skriptleri işletmegiň howply bolup biljekdigini we serweriňize çynlakaý howpsuzlyk howpuny döredip biljekdigini biliň. ulgamyňyzdaky işjeň gabyklary ulanyp işlediň, emma web sahypaňyza dinamiki funksiýa goşup, statiki HTML tarapyndan goýlan statiki päsgelçiligi giňeldip bilersiňiz.