Menginstal fcgiwrap dan memungkinkan bahasa Perl, Ruby dan Bash di Gentoo Lemp

Menginstal fcgiwrap dan memungkinkan bahasa Perl, Ruby dan Bash di Gentoo Lemp

Tutorial ini sangat terkait dengan yang sebelumnya pada instalasi LEMP di Gentoo dan memperlakukan server lain yang diperpanjang masalah seperti memungkinkan bahasa skrip dinamis seperti Perl atau Bash atau Ruby Through Gateway fcgiwrap, dan mengedit file konfigurasi host virtual nginx untuk melayani konten dinamis menggunakan .pl, .RB Dan .CGI skrip.

Instal fcgiwrap dengan perl, ruby ​​dan bash

Persyaratan

  1. Tumpukan Lemp diinstal di Gentoo - https: // www.tecmint.com/install-lemp-in-gentoo-linux/

Langkah 1: Aktifkan fcgiwrap di Gentoo Lemp

Fcgiwrap adalah bagian dari Antarmuka gateway umum nginx fastcgi Mana yang memproses bahasa skrip dinamis lainnya, seperti skrip Perl atau Bash atau Ruby, berfungsi dengan memproses permintaan yang diterima dari Nginx, melalui soket TCP atau UNIX, dengan cara yang mandiri dan mengembalikan hasil yang dihasilkan kembali ke Nginx, yang, dalam istilah, akan meneruskan respons yang meneruskan tanggapan Kembali Klien Kembali.

1. Mari kita mulai pertama dengan menginstal Fccgiwrap Proses di Gentoo Linux menggunakan perintah berikut.

# emerge --ask www-misc/fcgiwrap
Instal Paket FCCGIWRAP

2. Secara default paket fcgiwrap tidak menyediakan apapun init skrip di gentoo untuk mengelola proses. Setelah paket dikompilasi dan diinstal, buat berikut ini init skrip yang membantu Anda mengelola proses fcgiwrap menggunakan tiga pendekatan: baik meluncurkan proses menggunakan Soket domain UNIX atau menggunakan lokal Soket TCP atau menggunakan keduanya secara bersamaan.

Menggunakan skrip soket TCP

Buat file init di /etc/init.D/ jalur dengan konten file berikut.

# nano /etc /init.d/fcgiwrap

Tambahkan konten file berikut.

#!/sbin/runscript ip = "0.0.0.0 "port =" 12345 "start () ebegin" mulai proses fcgiwrap ... "/usr/sbin/fcgiwrap -s tcp: $ ip: $ port & tcp_sock =" netstat -tulpn | GREP FCGIWRAP Detail Soket "Echo": $ tcp_sock "eend $? "Kesalahan ditemui saat memulai proses fcgiwrap" stop () ebegin "Menghentikan proses fcgiwrap ..." pid = "ps a | grep fcgiwrap | grep tcp | cut -d" "-f1" kill -s 1 $ pid tcp_sock = " netstat -tulpn | grep fcgiwrap "Jika uji $ tcp_sock = 2> /dev /null; Kemudian echo "proses fcgiwrap berhasil berhenti" tcp_sock = "netstat -atulpn | grep $ port" jika uji $ tcp_sock = 2> /dev /null; Lalu echo "Tidak ada koneksi fcgiwrap yang ditemukan ..." lain echo "tunggu untuk menutup koneksi terbuka fcgiwrap ... harap verifikasi dengan 'status'" echo -e "detail soket: \ n $ tcp_sock" fi else echo "fcgiwarp Proses masih berjalan!Detail soket "echo": $ tcp_sock "fi eend $? "Kesalahan ditemui saat menghentikan proses fcgiwrap ..." status () Ebegin "Status FCGiWrap Proses ..." tcp_sock = "netstat -atulpn | grep $ port" jika uji $ tcp_sock = 2> /dev /null; Lalu proses "proses fcgiwrap tidak berjalan" else echo "fcgiwarp proses berjalan!Detail soket "echo -e": \ n $ tcp_sock "fi eend $? "Kesalahan ditemui saat menghentikan proses fcgiwrap ..."
Menggunakan skrip soket TCP

Seperti yang Anda lihat, file skrip masing -masing memiliki dua variabel di awal aku p Dan pelabuhan. Ubah variabel ini dengan kebutuhan Anda sendiri dan pastikan mereka tidak tumpang tindih dengan layanan lain di sistem Anda, terutama variabel port - default di sini 12345 - Ubah sesuai.

Menggunakan 0.0.0.0 pada variabel IP memungkinkan proses untuk mengikat dan mendengarkan di IP apa pun (di luar dapat diakses jika Anda tidak memiliki firewall), tetapi untuk alasan keamanan Anda harus mengubahnya untuk mendengarkan secara lokal, ON 127.0.0.1, Kecuali jika Anda memiliki alasan lain seperti Gateway FCGIWRAP dari jarak jauh pada simpul yang berbeda untuk kinerja atau penyeimbangan beban.

3. Setelah file dibuat, tambahkan izin eksekusi dan kelola proses daemon menggunakan sakelar start, stop atau status. Sakelar status akan menunjukkan kepada Anda informasi soket yang relevan seperti Ip-port Pasangkan itu mendengarkan dan jika ada koneksi aktif jika diinisialisasi. Juga, jika proses memiliki koneksi aktif di WAKTU MENUNGGU menyatakan Anda tidak dapat memulai kembali sampai semua koneksi TCP ditutup.

# chmod +x /etc /init.d/fcgiwrap # layanan mulai fcgiwrap #/etc/init.status d/fcgiwrap
Mulai layanan fcgiwrap
Menggunakan skrip soket unix

Seperti yang disajikan sebelumnya FCGIWRAP dapat berjalan secara bersamaan menggunakan kedua soket, jadi akan sedikit mengubah nama skrip kedua menjadi fcgiwrap-unix-socket, untuk memastikan bahwa keduanya dapat dimulai dan dijalankan pada waktu yang sama.

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

Gunakan konten file berikut untuk soket unix.

#!/sbin/runscript sock_detail = "ps a | grep fcgiwrap-unix | head -1" start () ebegin "mulai proses fcgiwrap-unix-socket…"/usr/sbin/fcgiwrap -s unix:/run/fcgiwrap-exix.Sock & Sleep 2 /bin /chown nginx: nginx /run /fcgiwrap-unix.kaus kaki tidur 1 kaus kaki = "ls -al /run /fcgiwrap -unix.Socket Sock "Sock" Socket: $ Sock "Eend $? "Kesalahan ditemui saat memulai 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 berhasil berhenti" #killall/usr/sbin/fcgiwrap tidur 1 echo "detail soket: $ sock" eend $ $? "Kesalahan ditemui saat menghentikan proses fcgiwrap ..." status () Ebegin "Status fcgiwrap-unix-socket proses ..." jika tes -s /run /fcgiwrap-unix.kaus kaki; lalu echo "proses dimulai dengan soket: $ sock_detail" else echo "proses fcgiwrap tidak berjalan!"Fi eend $? "Kesalahan ditemui saat menghentikan proses fcgiwrap ..."
Menggunakan skrip soket unix

4. Sekali lagi memastikan bahwa file ini dapat dieksekusi dan menggunakan sakelar layanan yang sama: awal, berhenti atau status. Saya telah mengatur jalur default untuk soket ini /run/fcgiwrap-unix.kaus kaki jalur sistem. Mulailah proses dan verifikasi menggunakannya status beralih atau daftar /berlari konten direktori dan temukan soket, atau gunakan ps -a | grep fcgiwrap memerintah.

# chmod +x /etc /init.d/fcgiwrap-unix-socket # layanan mulai fcgiwrap-unix-socket #/etc/init.D/fcgiwrap-unix-socket Status # ps -a | grep fcgiwrap
Mulai dan verifikasi fcgiwrap

Seperti yang disebutkan sebelumnya FCGIWRAP dapat berjalan dengan soket TCP dan UNIX secara simultan, tetapi jika Anda tidak perlu koneksi gateway eksternal tetap Soket domain UNIX Hanya, karena menggunakan komunikasi interproses, yang lebih cepat daripada komunikasi melalui koneksi loopback TCP, dan menggunakan lebih sedikit overhead TCP.

Soket domain UNIX

Langkah 2: Aktifkan skrip CGI di Nginx

5. Agar Nginx parse dan jalankan skrip perl atau bash melalui antarmuka gateway umum cepat, host virtual harus dikonfigurasi dengan definisi fcgiwrap pada jalur root atau pernyataan lokasi.

Contoh, disajikan di bawah ini (LocalHost), yang mengaktifkan skrip Perl dan CGI pada semua file yang ditempatkan di jalur root (/var/www/localhost/htdocs/) dengan .pl Dan .CGI Ekstensi Menggunakan Soket TCP FCGIWRAP untuk jalur dokumen root default, lokasi kedua menggunakan Soket domain UNIX, dengan sebuah indeks.pl file dan lokasi ketiga menggunakan Soket TCP dengan sebuah indeks.CGI mengajukan.

Tempatkan konten berikut, atau hanya beberapa bagiannya, ke file konfigurasi host virtual yang Anda inginkan yang ingin Anda aktifkan dengan skrip Perl atau Bash dinamis dengan soket UNIX atau TCP di bawah lokasi yang berbeda, dengan memodifikasi fastcgi_pass pernyataan argumen.

# nano/etc/nginx/situs-tersedia/localhost.conf

Edit localhost.conf agar terlihat seperti di templat di bawah ini.

server dengarkan 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/; Lokasi / AutoIndex on; Indeks Indeks.Indeks HTML.indeks htm.PHP;  ## php -fpm gateway ### lokasi ~ \.php $ try_files $ uri = 404; termasuk/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 9001;  ## gateway fcgiwrap pada semua file di bawah root dengan soket tcp ### lokasi ~ \.(PL | CGI | RB) $ ​​Fastcgi_index Index.Indeks CGI.PL; termasuk/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 12345;  ## gateway fcgiwrap pada semua file di bawah folder root kedua dengan indeks.PL menggunakan soket unix ### lokasi /indeks indeks kedua indeks.PL; root/var/www/localhost/htdocs/; Lokasi ~ \.(pl | cgi | rb) $ include/etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/fcgiwrap-unix.kaus kaki; fastcgi_param script_filename $ document_root $ fastcgi_script_name;  ## gateway fcgiwrap pada semua file di bawah folder ketiga root dengan indeks.CGI Menggunakan Soket TCP ### Lokasi /Third Index Index.CGI; Lokasi ~ \.(pl | cgi | rb) $ include/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 12345; 

6. Setelah Anda selesai mengedit nginx localhost.conf, Atau file konfigurasi host virtual spesifik Anda, pindah ke jalur root dokumen default situs web Anda, buat dua folder tersebut untuk mencerminkan pernyataan lokasi Anda, dan membuat file indeks untuk setiap lokasi dengan ekstensi spesifiknya.

# CD/var/www/localhost/htdocs # mkdir sepertiga kedua

Membuat indeks.pl file di lokasi kedua dengan konten berikut.

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

Tambahkan konten ini untuk mendapatkan variabel lingkungan.

#!/usr/bin/perl cetak "tipe konten: teks/html \ n \ n"; mencetak <Indeks Perl CGI di lokasi kedua dengan variabel Env  Html mencetak "tipe konten: teks/html \ n \ n"; foreach my $ keys (sort Keys %env) print "$ keys = $ env $ keys
\ n "; keluar;

Lalu buat indeks.CGI file di lokasi ketiga dengan konten berikut.

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

Tambahkan konten ini untuk mendapatkan variabel lingkungan.

#!/Bin/Bash Echo Content-Type: Teks/html echo "" kucing << EOF  Bash script 
 

Indeks CGI bash di lokasi ketiga dengan variabel env

EOF Env Cat << EOF EOF

7. Saat selesai mengedit, buat kedua file dapat dieksekusi, restart server nginx dan pastikan bahwa kedua soket fcgiwrap sedang berjalan.

# chmod +x/var/www/localhost/htdocs/detik/indeks.PL # chmod +x/var/www/localhost/htdocs/ketiga/indeks.CGI # Service nginx restart # service fcgiwrap start # service fcgiwrap-unix-socket start

Selanjutnya, arahkan kembali browser lokal Anda tentang URL berikut.

http: // localhost http: // localhost/detik/http: // localhost/ketiga/

Hasilnya akan muncul seperti pada tangkapan layar di bawah ini.

Verifikasi direktori CGI Halaman Indeks Perl CGI Halaman Indeks CGI Bash

8. Jika semuanya ada di tempat dan dikonfigurasi dengan benar, aktifkan kedua daemon fcgiwrap untuk secara otomatis dimulai, setelah reboot dengan mengeluarkan perintah berikut (jika Anda telah mengkonfigurasi Nginx untuk menggunakan kedua soket CGI).

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

Langkah 3: Aktifkan Dukungan Ruby di FCGIWRAP

9. Jika Anda perlu menjalankan skrip ruby ​​dinamis di nginx fcgi Anda harus menginstal Rubi Penerjemah di Gentoo dengan perintah berikut.

# emerge -masukkan ruby
Pasang Ruby Interpreter

10. Setelah paket dikompilasi dan diinstal, pindah ke nginx situs-tersedia dan edit localhost.conf file dengan menambahkan pernyataan berikut sebelum braket keriting terakhir “”, yang mengaktifkan dukungan untuk menjalankan skrip ruby ​​di lokasi keempat di bawah jalur root dokumen default yang dilayani oleh nginx localhost.

# nano/etc/nginx/situs-tersedia/localhost.conf

Gunakan arahan nginx berikut.

## gateway fcgiwrap pada semua file di bawah folder keempat root dengan indeks.RB di bawah soket TCP ### Lokasi /Keempat indeks indeks.RB; Lokasi ~ \.RB $ include/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1: 12345;  ## braket keriting terakhir yang menutup definisi server nginx ##
Aktifkan Dukungan Ruby di fcgiwrap

11. Sekarang, untuk menguji konfigurasi, buat direktori keempat di bawah /var/www/localhost/htdocs jalur, buat skrip indeks ruby ​​yang dapat dieksekusi dengan .RB ekstensi dan tambahkan konten berikut.

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

Indeks Ruby.Contoh RB.

#!/usr/bin/ruby menempatkan "http/1.0 200 OK "menempatkan" tipe konten: teks/html \ n \ n "menempatkan" skrip ruby ​​"menempatkan"
"menempatkan"

Indeks CGI Ruby di lokasi keempat dengan variabel Env

"Sistem ('Env')

12. Setelah Anda menambahkan izin eksekusi pada file, restart nginx daemon untuk menerapkan konfigurasi.

# chmod +x/var/www/localhost/htdocs/keempat/indeks.RB # service nginx restart

Buka browser Anda dan navigasikan ke URL http: // localhost/keempat/, Yang seharusnya memberi Anda konten berikut.

Halaman Indeks Ruby CGI

That's it for now, you have configured Nginx to serve dynamic Perl, Ruby and Bash scripts on FastCGI Gateway, but, be aware that running this kind of interpreted scripts on Nginx CGI Gateway can be dangerous and impose seriously security risks on you server because they Jalankan menggunakan shell aktif di bawah sistem Anda, tetapi dapat memperluas penghalang statis yang dikenakan oleh HTML statis, menambahkan fungsionalitas dinamis ke situs web Anda.