Memasang FCGIWRAP dan Membolehkan Perl, Ruby dan Bash Dynamic Languages ​​On Gentoo Lemp

Memasang FCGIWRAP dan Membolehkan Perl, Ruby dan Bash Dynamic Languages ​​On Gentoo Lemp

Tutorial ini sangat berkaitan dengan bekas pemasangan Lemp pada gentoo dan merawat isu -isu lanjutan pelayan lain seperti membolehkan bahasa skrip dinamik seperti perl atau bash atau ruby ​​melalui Fcgiwrap Gateway, dan edit fail konfigurasi tuan rumah maya nginx untuk melayani kandungan dinamik menggunakan .pl, .rb dan .CGI Skrip.

Pasang fcgiwrap dengan perl, ruby ​​dan bash

Keperluan

  1. Stack lemp dipasang pada gentoo - https: // www.Tecmint.com/install-lemp-in-gentoo-linux/

Langkah 1: Aktifkan fcgiwrap pada Gentoo Lemp

Fcgiwrap adalah sebahagian daripada Antara muka gerbang biasa nginx fastcgi yang memproses bahasa skrip dinamik yang lain, seperti Perl atau Bash atau Ruby Scripts, berfungsi dengan pemprosesan permintaan yang diterima dari Nginx, melalui soket TCP atau UNIX, secara bebas dan mengembalikan hasil yang dihasilkan kembali ke Nginx, yang, dalam jangka masa Kembali ke Akhir Pelanggan.

1. Mari mulakan dengan memasang Fccgiwrap proses pada gentoo linux menggunakan arahan berikut.

# EMERGE --Ank www-MISC/FCGIWRAP
Pasang pakej FCCGIWRAP

2. Secara lalai pakej fcgiwrap tidak memberikan apa -apa di dalamnya skrip pada gentoo untuk menguruskan proses. Setelah pakej telah disusun dan dipasang buat yang berikut di dalamnya skrip yang membantu anda menguruskan proses fcgiwrap menggunakan tiga pendekatan: sama ada melancarkan proses menggunakan Soket Domain Unix atau menggunakan tempatan Soket TCP atau menggunakan kedua -duanya pada masa yang sama.

Menggunakan skrip soket TCP

Buat fail init /etc/init.d/ jalan dengan kandungan fail berikut.

# nano /etc /init.d/fcgiwrap

Tambahkan kandungan fail berikut.

#!/sbin/runscript ip = "0.0.0.0 "port =" 12345 "start () ebegin" Memulakan proses fcgiwrap ... "/usr/sbin/fcgiwrap -s tcp: $ ip: $ port & tcp_sock =" netstat -tulpn | Butiran soket "echo" grep fcgiwrap: $ tcp_sock "eend $? "Kesilapan telah ditemui semasa memulakan proses fcgiwrap" stop () ebegin "menghentikan proses fcgiwrap ..." pid = "ps a | grep fcgiwrap | grep tcp | cut -d" "-f1" bunuh -s 1 $ pid tcp_sock = " netstat -tulpn | grep fcgiwrap "Jika ujian $ tcp_sock = 2> /dev /null; Kemudian echo "proses fcgiwrap berjaya dihentikan" tcp_sock = "netstat -atulpn | grep $ port" jika ujian $ tcp_sock = 2> /dev /null; Kemudian echo "No Open Fcgiwrap Connection Found ..." else Echo "Wait to Close FcgiWrap Open Connections ... Sila sahkan dengan 'status'" echo -e "butiran soket: \ n $ tcp_sock" fi echo "proses fcgiwarp masih berjalan!Butiran soket "echo": $ tcp_sock "fi eend $? "Kesilapan telah ditemui semasa menghentikan proses fcgiwrap ..." status () ebegin "Status fcgiwrap proses ..." tcp_sock = "netstat -atulpn | grep $ port" jika ujian $ tcp_sock = 2> /dev /null; Kemudian echo "proses fcgiwrap tidak menjalankan proses fcgiwarp" else echo "!"echo -e" Butiran soket: \ n $ tcp_sock "fi eend $? "Kesilapan ditemui semasa menghentikan proses fcgiwrap ..."
Menggunakan skrip soket TCP

Seperti yang anda dapat lihat fail skrip memegang dua pembolehubah pada awalnya ip dan pelabuhan. Tukar pembolehubah ini dengan keperluan anda sendiri dan pastikan mereka tidak bertindih dengan perkhidmatan lain pada sistem anda, terutama pembolehubah pelabuhan - lalai di sini adalah 12345 - berubah sewajarnya.

Menggunakan 0.0.0.0 Pada pembolehubah IP membolehkan proses mengikat dan mendengar mana -mana IP (di luar boleh diakses jika anda tidak mempunyai firewall), tetapi atas alasan keselamatan anda harus mengubahnya untuk mendengar secara tempatan, 127.0.0.1, Kecuali anda mempunyai alasan lain seperti Gateway Fcgiwrap dari jauh dari nod yang berbeza untuk prestasi atau mengimbangi beban.

3. Selepas fail dibuat, tambahkan kebenaran pelaksanaan dan uruskan proses daemon menggunakan suis Start, Stop atau Status. Suis status akan menunjukkan maklumat soket yang relevan seperti IP-port pasangan itu mendengar dan jika ada sambungan aktif di mana dimulakan. Juga, jika proses mempunyai sambungan aktif dalam Time_wait nyatakan anda tidak dapat memulakannya sehingga semua sambungan TCP ditutup.

# chmod +x /etc /init.D/FCGIWRAP # Service Start FCGIWRAP #/ETC/INIT.status d/fcgiwrap
Mulakan perkhidmatan FCGIWRAP
Menggunakan skrip soket unix

Seperti yang dibentangkan sebelum ini fcgiwrap boleh berjalan secara serentak menggunakan kedua -dua soket, jadi sedikit akan menukar nama skrip kedua ke fcgiwrap-unix-socket, untuk memastikan bahawa kedua -duanya dapat dimulakan dan berjalan pada masa yang sama.

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

Gunakan kandungan fail berikut untuk soket unix.

#!/sbin/runscript sock_detail = "ps a | grep fcgiwrap-unix | head -1" start () ebegin "bermula fcgiwrap-unix-socket ..."/usr/sbin/fcgiwrap -s unix:/run/fcgiwrap-up-up.Sock & Sleep 2 /bin /Chown Nginx: nginx /run /fcgiwrap-nix.Sock Sleep 1 Sock = "ls -al /run /fcgiwrap -unix.Sock "Echo" Butiran soket: $ sock "eend $? "Kesilapan telah ditemui semasa memulakan proses fcgiwrap" stop () ebegin "menghentikan proses fcgiwrap -unix -socket ..." pid = "ps a | grep fcgiwrap | grep unix | cut -d" "-f1" rm -f /run /fcgiwrap-unix.Sock Kill -s 1 $ PID Echo "Proses FcgiWrap Berjaya Berhenti" #Killall/usr/sbin/fcgiwrap tidur 1 echo "Socket: $ sock" eend $? "Kesilapan telah ditemui semasa menghentikan proses fcgiwrap ..." status () ebegin "Status fcgiwrap-unix-socket Process ..." Jika test -s /run /fcgiwrap-unix.kaus kaki; kemudian echo "proses dimulakan dengan soket: $ sock_detail" else echo "proses fcgiwrap tidak berjalan!"Fi eend $? "Kesilapan ditemui semasa menghentikan proses fcgiwrap ..."
Menggunakan skrip soket unix

4. Sekali lagi memastikan bahawa fail ini boleh dilaksanakan dan menggunakan suis perkhidmatan yang sama: Mula, Berhenti atau status. Saya telah menetapkan laluan lalai untuk soket ini /Run/FCGIWRAP-UNIX.kaus kaki Laluan sistem. Mulakan proses dan sahkan menggunakannya status menukar atau menyenaraikan /lari kandungan direktori dan cari soket, atau gunakan ps -a | Grep fcgiwrap perintah.

# chmod +x /etc /init.D/FCGIWRAP-UNIX-SOCCET # Service Start FCGIWRAP-UNIX-SOCKET #/ETC/INIT.D/FCGIWRAP-UNIX-SOCK STATUS # PS -A | Grep fcgiwrap
Mula dan sahkan fcgiwrap

Seperti yang dinyatakan sebelum ini FCGIWRAP boleh dijalankan dengan kedua -dua soket TCP dan UNIX serentak, tetapi jika anda tidak memerlukan sambungan gerbang luaran yang tetap Soket domain Unix Hanya, kerana ia menggunakan komunikasi interprocess, yang lebih cepat daripada komunikasi melalui sambungan loopback TCP, dan menggunakan kurang overhead TCP.

Soket domain Unix

Langkah 2: Aktifkan skrip CGI pada nginx

5. Untuk nginx untuk menghuraikan dan menjalankan skrip perl atau bash melalui antara muka gerbang biasa yang cepat, tuan rumah maya mesti dikonfigurasikan dengan definisi fcgiwrap pada laluan akar atau penyataan lokasi.

Contohnya, dibentangkan di bawah (localhost), yang mengaktifkan skrip Perl dan CGI pada semua fail yang diletakkan di laluan akar (/var/www/localhost/htdocs/) dengan .pl dan .CGI Pelanjutan Menggunakan soket TCP FCGIWRAP untuk laluan dokumen akar lalai, lokasi kedua menggunakan Soket Domain Unix, dengan indeks.pl fail dan lokasi ketiga menggunakan Soket TCP dengan indeks.CGI fail.

Letakkan kandungan berikut, atau hanya beberapa bahagian, ke fail konfigurasi hos maya yang anda inginkan yang anda ingin mengaktifkan skrip Perl atau bash dinamik dengan soket UNIX atau TCP di bawah lokasi yang berbeza, dengan mengubah suai fastcgi_pass pernyataan hujah.

# nano/etc/nginx/sites-tersedia/localhost.Conf

Edit localhost.Conf kelihatan seperti di templat di bawah.

pelayan mendengar 80; server_name localhost; Access_log/var/log/nginx/localhost_access_log utama; error_log/var/log/nginx/localhost_error_log info; root/var/www/localhost/htdocs/; lokasi / autoindex on; Indeks indeks.Indeks HTML.Indeks HTM.PHP;  ## php -fpm gateway ### lokasi ~ \.php $ try_files $ uri = 404; termasuk/etc/nginx/fastcgi.Con; fastcgi_pass 127.0.0.1: 9001;  ## FCGIWRAP Gateway pada semua fail di bawah akar dengan soket TCP ### lokasi ~ \.(PL | CGI | RB) $ ​​FastCGI_Index Index.Indeks CGI.pl; termasuk/etc/nginx/fastcgi.Con; fastcgi_pass 127.0.0.1: 12345;  ## FCGIWRAP Gateway pada semua fail di bawah folder kedua root dengan indeks.PL Menggunakan Soket Unix ### Lokasi /Kedua Indeks Indeks.pl; root/var/www/localhost/htdocs/; Lokasi ~ \.(PL | CGI | RB) $ ​​termasuk/etc/nginx/fastcgi.Con; fastcgi_pass unix:/run/fcgiwrap-unix.kaus kaki; fastcgi_param script_filename $ document_root $ fastcgi_script_name;  ## Gateway fcgiwrap pada semua fail di bawah folder ketiga root dengan indeks.CGI Menggunakan Soket TCP ### Lokasi /Ketiga Indeks Indeks.CGI; Lokasi ~ \.(PL | CGI | RB) $ ​​termasuk/etc/nginx/fastcgi.Con; fastcgi_pass 127.0.0.1: 12345; 

6. Setelah selesai mengedit nginx localhost.Conf, atau fail konfigurasi hos maya khusus anda, pindah ke laluan root dokumen lalai laman web anda, buat kedua -dua folder tersebut untuk mencerminkan pernyataan lokasi anda, dan buat fail indeks untuk setiap lokasi dengan lanjutan khususnya.

# cd/var/www/localhost/htdocs # mkdir kedua ketiga

Buat indeks.pl fail di lokasi kedua dengan kandungan berikut.

# nano/var/www/localhost/htdocs/kedua/indeks.pl

Tambahkan kandungan ini untuk mendapatkan pembolehubah persekitaran.

#!/usr/bin/perl cetak "jenis kandungan: teks/html \ n \ n"; Cetak <Indeks Perl CGI di lokasi kedua dengan pembolehubah env  Cetak html "jenis kandungan: teks/html \ n \ n"; Foreach My Keys $ (Sort Keys %Env) Print "$ Keys = $ env $ Keys
\ n "; keluar;

Kemudian buat indeks.CGI fail di lokasi ketiga dengan kandungan berikut.

# nano/var/www/localhost/htdocs/ketiga/indeks.CGI

Tambahkan kandungan ini untuk mendapatkan pembolehubah persekitaran.

#!/bin/bash echo kandungan-jenis: teks/html echo "" kucing << EOF  Bash script 
 

Indeks Bash CGI di lokasi ketiga dengan pembolehubah env

EOF ENV CAT << EOF EOF

7. Apabila selesai mengedit, buat kedua -dua fail boleh dilaksanakan, mulakan semula pelayan nginx dan pastikan kedua -dua soket fcgiwrap berjalan.

# chmod +x/var/www/localhost/htdocs/kedua/indeks.PL # chmod +x/var/www/localhost/htdocs/ketiga/indeks.CGI # Service Nginx Restart # Service Fcgiwrap Mula # Perkhidmatan FCGIWRAP-UNIX-SOKKON Mula

Seterusnya, mengalihkan penyemak imbas tempatan anda di URL berikut.

http: // localhost http: // localhost/kedua/http: // localhost/ketiga/

Hasilnya sepatutnya muncul seperti di bawah tangkapan skrin.

Sahkan direktori CGI Halaman Indeks Perl CGI Halaman Indeks CGI Bash

8. Sekiranya semuanya ada dan dikonfigurasikan dengan betul, aktifkan kedua -dua daemon FCGIWRAP bermula secara automatik, selepas reboot dengan mengeluarkan arahan berikut (sekiranya anda telah mengkonfigurasi NGINX untuk menggunakan kedua -dua soket CGI).

# rc-update tambah fcgiwrap lalai # rc-update tambah fcgiwrap-unix-socket lalai

Langkah 3: Aktifkan Sokongan Ruby pada FCGIWRAP

9. Sekiranya anda perlu menjalankan skrip ruby ​​dinamik di nginx fcgi, anda mesti memasang Ruby penterjemah dengan gentoo dengan arahan berikut.

# Emerge -Ruby Ruby
Pasang penterjemah Ruby

10. Selepas pakej telah disusun dan dipasang, pindah ke nginx Tapak-tapak tersedia dan edit localhost.Conf Fail dengan mengemukakan pernyataan berikut sebelum kurungan keriting terakhir "", yang mengaktifkan sokongan untuk menjalankan skrip Ruby di lokasi keempat di bawah Laluan Root Dokumen Lalai yang Dilayan oleh Nginx Localhost.

# nano/etc/nginx/sites-tersedia/localhost.Conf

Gunakan arahan nginx berikut.

## FCGIWRAP Gateway di semua fail di bawah folder keempat root dengan indeks.RB di bawah Soket TCP ### Lokasi /Keempat Indeks Indeks.RB; Lokasi ~ \.RB $ termasuk/etc/nginx/fastcgi.Con; fastcgi_pass 127.0.0.1: 12345;  ## pendakap keriting terakhir yang menutup definisi pelayan nginx ##
Dayakan sokongan Ruby pada fcgiwrap

11. Sekarang, untuk menguji konfigurasi buat direktori keempat di bawah /var/www/localhost/htdocs jalan, buat skrip indeks ruby ​​yang boleh dilaksanakan dengan .rb lanjutan dan tambahkan kandungan berikut.

# mkdir/var/www/localhost/htdocs/keempat # nano/var/www/localhost/htdocs/keempat/indeks.rb

Indeks Ruby.Contoh RB.

#!/usr/bin/ruby meletakkan "http/1.0 200 OK "meletakkan" jenis kandungan: teks/html \ n \ n "meletakkan" skrip ruby ​​"meletakkan"
"meletakkan"

Indeks Ruby CGI di lokasi keempat dengan pembolehubah env

"Sistem ('Env')

12. Selepas anda menambah kebenaran pelaksanaan pada fail, mulakan semula daemon nginx untuk memohon konfigurasi.

# chmod +x/var/www/localhost/htdocs/keempat/indeks.RB # Service Nginx Restart

Buka penyemak imbas anda dan navigasi ke URL http: // localhost/keempat/, yang harus membentangkan kandungan berikut.

Halaman Indeks Ruby CGI

Buat masa ini, anda telah mengkonfigurasi Nginx untuk melayani skrip Perl, Ruby dan Bash dinamik di Gateway Fastcgi, tetapi, sedar bahawa menjalankan skrip yang ditafsirkan semacam ini pada gerbang Nginx CGI boleh berbahaya dan mengenakan risiko keselamatan yang serius pada pelayan anda kerana mereka Jalankan menggunakan sistem kerang aktif di bawah anda, tetapi dapat mengembangkan halangan statik yang dikenakan oleh HTML statik, menambah fungsi dinamik ke laman web anda.