在Gentoo LEMP上安装FcgiWrap并启用Perl,Ruby和Bash动态语言

本教程严格解释了如何通过Fcgiwrap Gateway安装Fcgiwrap并启用动态脚本语言,如Perl或Bash或Ruby。

本教程是严格地与上Gentoo和对待其他的服务器扩展问题LEMP安装前者如启用动态脚本语言,如Perl或击或Ruby通过Fcgiwrap网关 ,和编辑Nginx的虚拟主机配置文件服务使用特等动态内容, .RB的CGI脚本。

使用Perl,Ruby和Bash安装FcgiWrap

使用Perl,Ruby和Bash安装FcgiWrap

要求

  1. LEMP堆叠安装在Gentoo - https://www.howtoing.com/install-lemp-in-gentoo-linux/

第1步:在Gentoo LEMP上启用FCGIWRAP

FcgiwrapNginx的FastCGI的通用网关接口的一部分,它处理其他动态脚本语言,如Perl或bash或Ruby脚本,作品通过处理从Nginx的接收,通过TCP或Unix套接字,以独立的方式请求,并返回产生的结果返回给Nginx,它将在长期内将响应转发给终端客户端。

1.让我们通过下面的命令在Gentoo Linux上安装FCcgiwrap过程首先开始。

# emerge --ask www-misc/fcgiwrap
在Gentoo Linux中安装FCcgiwrap

安装FCcgiwrap包

2.默认情况下Fcgiwrap包不提供任何的Gentoo 初始化脚本来管理的过程。 该软件包后已编译和安装创建以下的init脚本,可以帮助您管理使用三个方法Fcgiwrap过程:要么推出通过unix域套接字或使用本地TCP套接字或同时使用在同一时间的过程。

使用TCP套接字脚本

创建以下文件的内容/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..."
}
使用TCP套接字脚本

使用TCP套接字脚本

正如你所看到的脚本文件保存在开头两个可变,分别为IP端口 改变这个变量与自己的需要,并确保它们不会与其他服务您的系统上重叠,尤其是端口变量-默认这里是12345 -相应地改变。

IP上使用可变0.0.0.0可启用进程绑定,并在任何IP监听(外部访问,如果你没有一个防火墙),但出于安全原因,你应该改变它来听本地只,在127.0.0.1,除非你有其他原因,如在不同的节点上远程设置Fcgiwrap网关的性能或负载平衡。

3.创建文件后,追加执行权限,并使用启动管理守护进程,停止或状态开关。 开关的状态会显示相关的接口信息,如IP,端口对监听,如果在这里初始化任何活动连接。 此外,如果进程在TIME_WAIT状态的活动连接无法重新启动它,直到关闭所有TCP连接。

# chmod +x /etc/init.d/fcgiwrap
# service start fcgiwrap
# /etc/init.d/fcgiwrap status
启动FcgiWrap服务

启动FcgiWrap服务

使用Unix套接字脚本

正如前面介绍Fcgiwrap可以同时使用socket同时运行,所以会稍微改变第二个脚本fcgiwrap UNIX的socket ,的名称,以确保既可以启动并运行同一时间。

# 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..."
}
使用Unix套接字脚本

使用Unix套接字脚本

4.再次保证,这个文件是可执行的,并使用相同的服务开关: 启动停止状态 我已经设置了默认路径/run/fcgiwrap-unix.sock系统路径上此套接字。 启动过程中,使用状态等开关或列表/运行目录的内容进行验证,并找到socket,或用ps -a | grep的fcgiwrap命令。

# chmod +x /etc/init.d/fcgiwrap-unix-socket
# service start fcgiwrap-unix-socket
# /etc/init.d/fcgiwrap-unix-socket status
# ps -a | grep fcgiwrap
开始和验证Fcgiwrap

开始和验证Fcgiwrap

正如前面提到的Fcgiwrap可以用TCP和Unix套接字同时运行,但如果你并不需要外部网关连接坚守Unix域套接字而已,因为它使用的进程间通信,这比通过TCP环回连接的通信速度更快,使用更少TCP开销。

Unix域套接字

Unix域套接字

第2步:在Nginx上启用CGI脚本

5.对于Nginx的解析和运行通过快速公共网关接口Perl或的bash脚本,虚拟主机必须以root路径或位置上的语句定义Fcgiwrap配置。

一个例子,提出以下(本地主机),激活Perl和CGI脚本上( 在/ var / WWW /本地主机/ htdocs中/)使用Fcgiwrap TCP套接字的默认根文件路径和特等扩展名为.cgi放在根路径中的所有文件,第二位置使用unix域套 ,与index.pl文件和第三个地点是一个使用TCP套接字index.cgi脚本文件。

将下面的内容,或者只是它的某些部分,您所需的虚拟主机配置文件要激活与UNIX或TCP套接字动态Perl或的bash脚本在不同的地点,通过修改参数fastcgi_pass声明。

# 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;       
}                                                                                             
}

6.编辑完Nginx的localhost.conf,或特定的虚拟主机配置文件后,移动到你的网站的默认文档根路径,创建这些两个文件夹,以反映您的位置的语句,并创建索引文件,其特定扩展每个位置。

# 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

7.当完成编辑,使这两个文件的可执行文件,重新启动Nginx的服务器,并确保两个Fcgiwrapsocket都在运行。

# 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目录

验证CGI目录

Perl CGI索引页

Perl CGI索引页

一个Bash CGI索引页

一个Bash CGI索引页

8.如果一切就绪并正确配置,同时启用Fcgiwrap守护程序发出以下命令(如果你配置Nginx的同时使用CGI接口)自动启动,重启后。

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

第3步:在Fcgiwrap上激活Ruby支持

9.如果你需要运行Nginx的上FCGI动态Ruby脚本必须在安装Gentoo的Ruby解释器使用下面的命令。

# emerge --ask ruby
安装Ruby解释器

安装Ruby解释器

包已经编译和安装10后,移到Nginx的网站,提供编辑localhost.conf文件通过附加前年花括号“}”下面的语句,激活的支持下默认的文档上的第四位置运行Ruby脚本根路径由Nginx localhost服务。

# 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 ##
}
在Fcgiwrap上启用Ruby支持

在Fcgiwrap上启用Ruby支持

11.现在,为了测试配置创建在/ var /网络/本地主机/ htdocs目录路径第四目录,创建.RB扩展一个可执行的Ruby脚本索引,并添加以下内容。

# 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')

12.在你的文件添加执行权限,重新启动Nginx的后台应用的配置。

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

打开浏览器,然后导航到http://本地主机/四/,它应该为您呈现以下内容。

Ruby CGI索引页

Ruby CGI索引页

这就是现在,你已经配置Nginx在FastCGI网关上提供动态Perl,Ruby和Bash脚本,但是,请注意,在Nginx CGI网关上运行这种解释脚本可能是危险的,并对你的服务器施加严重的安全风险,因为他们使用系统下的活动shell运行,但可以扩展静态HTML强加的静态屏障,为您的网站添加动态功能。