FcgiWrap'i Kurmak ve Gentoo LEMP'de Perl, Ruby ve Bash Dinamik Dillerini Etkinleştirmek


Bu eğitim, Gentoo'da LEMP Kurulumu ile ilgili önceki eğitimle tamamen ilgilidir ve Fcgiwrap Gateway aracılığıyla Perl veya Bash veya Ruby gibi dinamik komut dosyası dillerini etkinleştirmek ve Nginx Sanal Ana Bilgisayar yapılandırma dosyalarını düzenlemek gibi sunucuya yönelik diğer genişletilmiş sorunları ele alır. .pl, .rb ve .cgi komut dosyalarını kullanarak dinamik içerik sunun.

Gereksinimler

  1. Gentoo'da kurulu LEMP yığını – https://linux-console.net/install-lemp-in-gentoo-linux/

Adım 1: Gentoo LEMP'de FCGIWRAP'ı etkinleştirin

Fcgiwrap, Perl veya Bash veya Ruby komut dosyaları gibi diğer dinamik kodlama dillerini işleyen Nginx FastCGI Ortak Ağ Geçidi Arayüzü'nün bir parçasıdır ve Nginx'ten TCP veya aracılığıyla alınan istekleri işleyerek çalışır. Unix Soketleri, bağımsız bir şekilde üretilen sonucu Nginx'e geri gönderir ve Nginx, yanıtları son istemcilere iletir.

1. İlk olarak aşağıdaki komutu kullanarak FCcgiwrap işlemini Gentoo Linux'a yükleyerek başlayalım.

emerge --ask www-misc/fcgiwrap

2. Varsayılan olarak Fcgiwrap paketi, süreci yönetmek için Gentoo'da herhangi bir init komut dosyası sağlamaz. Paketler derlenip yüklendikten sonra, Fcgiwrap işlemini üç yaklaşımla yönetmenize yardımcı olacak aşağıdaki init komut dosyalarını oluşturun: ya Unix Etki Alanı Soketleri kullanarak işlemi başlatmak ya da yerel < kullanarak b>TCP Soketleri veya her ikisinin aynı anda kullanılması.

TCP Soket Komut Dosyasını Kullanma

/etc/init.d/ yolunda aşağıdaki dosya içeriğine sahip bir başlangıç dosyası oluşturun.

nano /etc/init.d/fcgiwrap

Aşağıdaki dosya içeriğini ekleyin.

#!/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ördüğünüz gibi script dosyası başlangıçta iki değişkeni barındırıyor; sırasıyla ip ve port. Bu değişkenleri kendi ihtiyaçlarınıza göre değiştirin ve sisteminizdeki diğer hizmetlerle, özellikle de bağlantı noktası değişkeniyle (burada varsayılan 12345'dir) çakışmadıklarından emin olun - buna göre değiştirin.

IP değişkeninde 0.0.0.0 kullanılması, işlemin herhangi bir IP'ye bağlanmasını ve dinlemesini sağlar (güvenlik duvarınız yoksa dışarıdan erişilebilir), ancak güvenlik nedeniyle bunu yalnızca yerel olarak dinleyecek şekilde değiştirmelisiniz. Performans veya yük dengeleme için Fcgiwrap ağ geçidini farklı bir düğümde uzaktan kurmak gibi başka nedenleriniz olmadığı sürece 127.0.0.1'de.

3. Dosya oluşturulduktan sonra yürütme izinlerini ekleyin ve başlatma, durdurma veya durum anahtarlarını kullanarak daemon sürecini yönetin. Durum anahtarı, dinlediği IP-PORT çifti ve başlatıldığı yerde herhangi bir aktif bağlantı olup olmadığı gibi ilgili soket bilgilerini gösterecektir. Ayrıca, işlemin TIME_WAIT durumunda etkin bağlantıları varsa, tüm TCP bağlantıları kapanana kadar işlemi yeniden başlatamazsınız.

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

Unix Soket Komut Dosyasını Kullanma

Daha önce sunulduğu gibi, Fcgiwrap her iki soketi kullanarak aynı anda çalışabilir, bu nedenle her ikisinin de aynı anda başlatılıp çalıştırılabilmesini sağlamak için ikinci betiğin adını biraz fcgiwrap-unix-socket olarak değiştireceğiz.

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

UNIX soketi için aşağıdaki dosya içeriğini kullanın.

#!/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 dosyanın çalıştırılabilir olduğundan bir kez daha emin olun ve aynı hizmet anahtarlarını kullanın: başlat, durdur veya durum. Bu soket için varsayılan yolu /run/fcgiwrap-unix.sock sistem yolunda ayarladım. İşlemi başlatın ve durum anahtarını kullanarak veya /run dizin içeriğini listeleyerek doğrulayın ve soketi bulun veya ps -a | grep fcgiwrap komutu.

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

Daha önce de belirtildiği gibi Fcgiwrap hem TCP hem de UNIX soketleriyle aynı anda çalışabilir, ancak harici ağ geçidi bağlantılarına ihtiyacınız yoksa yalnızca Unix Etki Alanı Soketine bağlı kalın çünkü işlemler arası iletişimi kullanır, bu da üzerinden iletişimden daha hızlıdır TCP geridöngü bağlantıları ve daha az TCP yükü kullanır.

Adım 2: Nginx'te CGI Komut Dosyalarını Etkinleştirin

5. Nginx'in Perl veya Bash komut dosyalarını Hızlı Ortak Ağ Geçidi Arayüzü aracılığıyla ayrıştırması ve çalıştırması için, Sanal Ana Bilgisayarların kök yolu veya konum ifadelerinde Fcgiwrap tanımlarıyla yapılandırılması gerekir.

Aşağıda, .pl/var/www/localhost/htdocs/) yerleştirilen tüm dosyalarda Perl ve CGI komut dosyalarını etkinleştiren bir örnek (localhost) sunulmaktadır. > ve .cgi uzantısı, varsayılan kök belge yolu için Fcgiwrap TCP Yuvalarını kullanır; ikinci konum, index.pl dosyasıyla birlikte Unix Etki Alanı Yuvalarını kullanır ve üçüncü konum, index.cgi dosyasıyla TCP yuvalarını kullanmaktır.

Aşağıdaki içeriği veya yalnızca bir kısmını, fastcgi_pass bağımsız değişken ifadesini değiştirerek, UNIX veya TCP Soketleri ile dinamik Perl veya Bash komut dosyalarını farklı konumlar altında etkinleştirmek istediğiniz Sanal Ana Bilgisayar yapılandırma dosyasına yerleştirin.

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

localhost.conf dosyasını aşağıdaki şablondaki gibi görünecek şekilde düzenleyin.

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'u veya belirli Sanal Ana Bilgisayar yapılandırma dosyanızı düzenlemeyi bitirdikten sonra, web sitenizin varsayılan belge kök yoluna gidin, konumunuzu yansıtacak bu iki klasörü oluşturun deyimini kullanın ve her konum için kendi özel uzantısına sahip dizin dosyaları oluşturun.

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

Aşağıdaki içeriğe sahip ikinci konumda index.pl dosyasını oluşturun.

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

Ortam değişkenlerini almak için bu içeriği ekleyin.

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

Daha sonra üçüncü konumda aşağıdaki içeriğe sahip index.cgi dosyasını oluşturun.

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

Ortam değişkenlerini almak için bu içeriği ekleyin.

#!/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. Düzenlemeyi bitirdiğinizde, her iki dosyayı da çalıştırılabilir yapın, Nginx sunucusunu yeniden başlatın ve her iki Fcgiwrap soketinin çalıştığından emin olun.

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

Daha sonra yerel tarayıcınızı aşağıdaki URL'ye yönlendirin.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Sonuç aşağıdaki ekran görüntülerindeki gibi görünmelidir.

8. Her şey yerli yerindeyse ve doğru şekilde yapılandırılmışsa, aşağıdaki komutları vererek yeniden başlatmanın ardından her iki Fcgiwrap arka plan programının otomatik olarak başlatılmasını etkinleştirin (Nginx'i her iki CGI yuvasını kullanacak şekilde yapılandırmış olmanız durumunda).

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

3. Adım: Fcgiwrap'te Ruby desteğini etkinleştirin

9. Nginx FCGI üzerinde dinamik Ruby komut dosyaları çalıştırmanız gerekiyorsa, aşağıdaki komutla Gentoo'ya Ruby yorumlayıcısını yüklemelisiniz.

emerge --ask ruby

10. Paket derlenip kurulduktan sonra Nginx sites-available'e geçin ve localhost.conf dosyasını önüne aşağıdaki ifadeleri ekleyerek düzenleyin. son süslü parantez “ } ”, Ruby komut dosyalarını Nginx localhost tarafından sunulan varsayılan belge kök yolu altında dördüncü bir konumda çalıştırma desteğini etkinleştirir.

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

Aşağıdaki Nginx yönergelerini kullanın.

## 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. Şimdi, yapılandırmayı test etmek için /var/www/localhost/htdocs yolu altında dördüncü dizini oluşturun, .rb uzantısını seçin ve aşağıdaki içeriği ekleyin.

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

Ruby index.rb örneği.

#!/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. Dosyaya yürütme izinlerini ekledikten sonra, yapılandırmaları uygulamak için Nginx arka plan programını yeniden başlatın.

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

Tarayıcınızı açın ve size aşağıdaki içeriği sunacak olan http://localhost/fourth/ URL'sine gidin.

Şimdilik bu kadar, Nginx'i FastCGI Ağ Geçidi üzerinde dinamik Perl, Ruby ve Bash komut dosyaları sunacak şekilde yapılandırdınız, ancak Nginx CGI Ağ Geçidi üzerinde bu tür yorumlanmış komut dosyalarını çalıştırmanın tehlikeli olabileceğini ve sunucunuz üzerinde ciddi güvenlik riskleri oluşturabileceğini unutmayın. sisteminizin altındaki aktif kabukları kullanarak çalışır, ancak statik HTML tarafından uygulanan statik bariyeri genişleterek web sitenize dinamik işlevsellik ekleyebilir.