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.
- 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
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.