Gentoo LEMP -ב Bash -ו Perl, Ruby לש תוימניד תופש תרשפאמו FcgiWrap תנקתה
.םיטפירקס .cgi -ו .pl , .rb תועצמאב ימניד ןכות שיגהל ידכ Nginx לש םיילאוטריו םיחראמ לש הרוצת יצבק ךורעלו ,Fcgiwrap Gateway ךרד Ruby וא Bash וא Perl ומכ תוימניד טפ
Gentoo LEMP -ב FCGIWRAP תא לעפה :1 בלש
Fcgiwrap מ קלח אוה קשממ Nginx FastCGI Common Gateway םיטפירקס ומכ ,תורחא תוימניד טפירקס תופש דבעמה Perl וא Bash וא Ruby, מ ולבקתהש תושקב דוביע ידי לע דבוע- Nginx, ךרד TCP
.האבה הדוקפה תועצמאב Gentoo Linux -ב FCcgiwrap ךילהת תנקתהב תישאר ליחתנ .1
# emerge --ask www-misc/fcgiwrap
.תינמז וב םהינש תועצמאב וא
.אבה ץבוקה ןכות םע /etc/init.d/ ביתנב init ץבוק רוצ
# nano /etc/init.d/fcgiwrap
.אבה ץבוקה ןכות תא ףסוה
#!/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..." }
.םאתהב הנש - 12345 איה ןאכ לדחמה תרירב - האיצי הנתשמ דחוימב ,ךלש תכרעמב םירחא םיתורישל םיפפוח אל םהש אדוו ךלש םיכרצה יפל הלאה םינתשמה תא הנש . האיצי -ו ip המאתהב
.םיסמוע ןוזיא וא םיעוציב ךרוצל רחא תמוצב Fcgiwrap רעש לש קוחרמ הנקתה ומכ תורחא תוביס ךל שי ןכ םא אלא , 127.0.0.1 ךיראתב דבלב תימוקמ הנזאהל ותוא תונשל ךילע החטבא ימעטמ ךא ,(שא תמוח
.ורגסיי TCP ירוביח לכש דע שדחמ ותוא ליעפהל לוכי ךניא TIME_WAIT בצמב םיליעפ םירוביח שי ךילהתל םא ,ןכ ומכ .וב היה והשלכ ליעפ רוביח םאו בישקמ אוהש גוז IP-PORT ןוגכ יטנוולר י
# chmod +x /etc/init.d/fcgiwrap # service start fcgiwrap # /etc/init.d/fcgiwrap status
.ןמז ותואב םהינש תא ליעפהלו ליחתהל היהי ןתינש חיטבהל ידכ , fcgiwrap-unix-socket ל ינשה טפירקסה םש תא טעמ הנשיש ךכ ,םיעקשה ינש תועצמאב תינמז וב ץורל לוכי Fcgiwrap ןכל םדוק גצוהש יפכ
# nano /etc/init.d/fcgiwrap-unix-socket
.UNIX עקשל אבה ץבוקה ןכותב שמתשה
#!/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..." }
.הדוקפ ps -a | grep fcgiwrap ב שמתשה וא ,עקשה תא רתאו לעפה/ הירפסה ןכות תמישר וא סוטטס גתמ תועצמאב ותוא אדוו ךילהתה תא לחתה . /run/fcgiwrap-unix.sock
# chmod +x /etc/init.d/fcgiwrap-unix-socket # service start fcgiwrap-unix-socket # /etc/init.d/fcgiwrap-unix-socket status # ps -a | grep fcgiwrap
.TCP לש הרוקת תוחפ םישמתשמו TCP loopback ירוביח תרושקתמ רתוי הריהמה ,סצורפ-ןיב תרושקתב שמתשמ אוהש ןוויכמ ,דבלב סקינוי לש ןיימוד עקש ל דמציה ,םיינוציח רעש ירוביחל קוקז ךניא םא ךא
Nginx -ב CGI לש םיטפירקס לעפה :2 בלש
.םוקימ תורהצה וא שרוש ביתנב Fcgiwrap תורדגה םע םיילאוטריו םיחראמ רידגהל שי ,ריהמ ףתושמ רעש קשממ ךרד Bash וא Perl לש םיטפירקס ליעפיו חתני Nginx -ש ידכ .5
. index.cgi ץבוק םע
. fastcgi_pass ןועיט תרהצה יוניש ידי לע ,םינוש םימוקימב TCP וא UNIX יעקש םע םיימניד Bash וא Perl םיטפירקס ליעפהל ךנוצרבש יוצרה ילאוטריווה חראמה הרוצתה ץבוקל ,ונממ םימיוסמ םיקלח קר
# nano /etc/nginx/sites-available/localhost.conf
.הטמל תינבתב הארייש ךכ localhost.conf תא ךורע
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; } }
.ולש תיפיצפסה תמויסה םע םוקימ לכ רובע סקדניא יצבק רוצו ךלש םוקימה תרהצה תא ףקשל ידכ הלא תויקית יתש רוצ ,ךלש רתאב לדחמ תרירבכ רדגומה ךמסמה שרוש ביתנל רובע ,ילאוטריו חראמ לש יפיצפסה הרוצתה ץ
# cd /var/www/localhost/htdocs # mkdir second third
.אבה ןכותה םע ינש םוקימב index.pl ץבוק רוצ
# nano /var/www/localhost/htdocs/second/index.pl
.הביבס ינתשמ לבקל ידכ הז ןכות ףסוה
#!/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;
.אבה ןכותה םע ישילש םוקימב index.cgi ץבוק רוצ ןכמ רחאל
# nano /var/www/localhost/htdocs/third/index.cgi
.הביבס ינתשמ לבקל ידכ הז ןכות ףסוה
#!/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
.םילעופ Fcgiwrap יעקש ינשש אדוו Nginx תרש תא שדחמ לעפה ,הלעפהל םיצבקה ינש תא ךופה ,הכירעה םויסב .7
# 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
.האבה רתאה תבותכל ךלש ימוקמה ןפדפדה תא שדחמ הנפה ,ןכמ רחאל
http://localhost http://localhost/second/ http://localhost/third/
.הטמל ךסמ ימולצתב ומכ עיפוהל הכירצ האצותה
.(CGI יעקש ינשב שמתשהל Nginx תא תרדגהש הרקמב) תואבה תודוקפה תקפנה ידי לע שדחמ לוחתא רחאל ,תיטמוטוא ליחתהל Fcgiwrap לש םינומדה ינשל רשפא ,יוארכ רדגומו םוקמב לכה םא .8
# rc-update add fcgiwrap default # rc-update add fcgiwrap-unix-socket default
Fcgiwrap -ב Ruby לש הכימתה תא לעפה :3 בלש
.האבה הדוקפה םע Gentoo -ב Ruby ןמגרותמ ןיקתהל ךילע Nginx FCGI -ב םיימניד םייבור םיטפירקס ץירהל ךירצ התא םא .9
# emerge --ask ruby
.Nginx localhost ידי לע שגומה ךמסמה לש לדחמה תרירב שרוש ביתנ תחת יעיבר םוקימב Ruby לש םיטפירקס תלעפהב הכימת ליעפמש ,\"}" ןורחא לתלותמ רגוס ינפל תואבה תורהצהה תפסוה ידי לע lo
# nano /etc/nginx/sites-available/localhost.conf
.תואבה Nginx תוארוהב שמתשה
## 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 ## }
.ןכֶוֹת םיאבה םירבדה תא ףסוהו .rb תמויס םע הלעפהל Ruby סקדניא טפירקס רוצ ,/var/www/localhost/htdocs ביתנה תחת תיעיברה היירפסה תא רוצ ,הרוצתה תא קודבל ידכ ,תעכ .11
# mkdir /var/www/localhost/htdocs/fourth # nano /var/www/localhost/htdocs/fourth/index.rb
.Ruby index.rb אמגוד
#!/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')
.תורוצת ליחהל ידכ Nginx לש ןומדה תא שדחמ לעפה ,ץבוקב עוציב תואשרה ףיסותש רחאל .12
# chmod +x /var/www/localhost/htdocs/fourth/index.rb # service nginx restart
.אבה ןכותה תא ךל גיצהל הרומאש ,/יעיברה/b> http:// localhost> רתאה תבותכ לא טוונו ןפדפדה תא חתפ
.ךלש רתאל תימניד תוילנויצקנופ ףיסוהלו ,יטטס HTML ידי לע לטומה יטטסה םוסחמה תא ביחרהל לוכי ךא ,ךלש תכרעמה תחת םיליעפ םיזגפ תועצמאב ץורל םהש ןוויכמ ךלש תרשה לע םירומח החטבא ינוכיס ליטהלו תנכ