实战Nginx与Perl、Java的安装与配置

  通过前面的介绍,可以对Nginx有了一个比较全面的认识:Nginx本身是一个静态的HTTP服务器和反向代理服务器,它不支持动态页面,所谓的Nginx对动态程序的支持都是通过反向代理功能实现的。下面要讲述的Nginx对Perl和JSP的支持,就是通过Nginx的反向代理功能完成的。Nginx对Perl和JSP的支持在实现细节上可能有一定差别,但是实现原理是完全一样的。

  Nginx的安装这里不再讲述,这假定Nginx的安装路径为/usr/local/nginx。

  一、Perl(FastCGI)的安装

  1.获取wrapper程序

  读者可以从 上下载nginx-fcgi.txt文件,然后将其命名为nginx-fcgi.pl并放到/usr/local/nginx目录下。nginx-fcgi.pl是一个用Perl脚本写的wrapper实例,所以,操作系统必须要安装Perl程序以及相关模块。

  2.安装相关的系统支持模块

  可以从下载所需的相应模块,然后进行安装。

  (1)安装FCGI模块

[root@localhost opt]# tar zxvf FCGI-0.71.tar.gz
[root@localhost opt]# cd FCGI-0.71
[root@localhost FCGI-0.71]# perl Makefile.PL
[root@localhost FCGI-0.71]# make
[root@localhost FCGI-0.71]# make install

  (2)安装IO模块

[root@localhost opt]# tar -xvzf IO-1.25.tar.gz
[root@localhost opt]# cd IO-1.25
[root@localhost IO-1.25]# perl Makefile.PL
[root@localhost IO-1.25]# make
[root@localhost IO-1.25]# make install

  (3)安装IO::ALL模块

[root@localhost opt]# tar -xvzf IO-All-0.39.tar.gz
[root@localhost opt]# cd IO-ALL-0.39
[root@localhost IO-ALL-0.39]# perl Makefile.PL
[root@localhost IO-ALL-0.39]#make
[root@localhost IO-ALL-0.39]#make install

  3.编写nginx-fcgi启动脚本

  仅仅有wrapper文件是不够的,还需要一个脚本来创建socket、启动wrapper以及将wrapper和socket绑定,下面通过一个shell脚本来完成这一系列工作。

[root@localhost root]# more nginx-fcgi
#!/bin/bash
nginxroot=http://down.chinaz.com/usr/local/nginx

start ()
{
chown nobody.root $nginxroot/logs
echo "$nginxroot/nginx-fcgi.pl -l $nginxroot/logs/nginx-fcgi.log -pid $nginxroot/logs/nginx-fcgi.pid -S $nginxroot/logs/nginx-fcgi.sock" >>$nginxroot/nginx_fcgi.sh
chown nobody.nobody $nginxroot/nginx_fcgi.sh
chmod 755 $nginxroot/nginx_fcgi.sh
sudo -u nobody $nginxroot/nginx_fcgi.sh
echo "start nginx-fcgi done"
}

stop ()
{
kill $(cat $nginxroot/logs/nginx-fcgi.pid)
rm $nginxroot/logs/nginx-fcgi.pid 2>/dev/null
rm $nginxroot/logs/nginx-fcgi.sock 2>/dev/null
rm $nginxroot/nginx_fcgi.sh 2>/dev/null
echo "stop nginx-fcgi done"
}

case $1 in
stop)
stop
;;

start)
start
;;

restart)
stop
start
;;

*)
echo $"Usage: perl-cgi {start|stop|restart}"
exit 1
esac

  在nginx-fcgi中,变量nginxroot指定Nginx的安装目录,nginx-fcgi.sock是生成的文件sock, nobody为运行nginx_fcgi进程的用户,这个用户要和运行Nginx的用户一致。

  配置完脚本后,将此文件放到/usr/local/nginx目录下,接着通过如下方式管理nginx-fcgi进程。

[root@localhost root]#chmod 755 /usr/local/nginx/nginx-fcgi.pl
[root@localhost root]#chmod 755 /usr/local/nginx/nginx-fcgi
[root@localhost root]#/usr/local/nginx/nginx-fcgi start|stop|restart

  二、为Nginx添加FCGI支持

  修改Nginx配置文件,在server虚拟主机中添加如下配置:

location ~ \.cgi$ {
root html;
fastcgi_pass unix:/usr/local/nginx/logs/nginx-fcgi.sock;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

  在这个location配置中,Nginx与FastCGI的通信方式为Unix Socket。根据经验,IP Socket在高并发访问下比Unix Socket稳定,但Unix Socket速度要比IP Socket快。 “$document_root”是虚拟主机的根目录,在这里是/usr/local/nginx/html目录。

  三、测试Nginx +Perl(FastCGI)

  所有配置工作完成后,即可启动服务了。首选启动nginx-fcgi进程,操作如下:

  /usr/local/nginx/nginx-fcgi start

  然后启动nginx服务。

  /usr/local/nginx/sbin/nginx

  下面在/usr/local/nginx/html目录下创建一个test.cgi的文件。

# disable filename globbing
set -f
echo "Content-type: text/plain; charset=iso-8859-1"
echo

echo CGI/1.0 test script report:
echo

echo argc is $#. argv is "$*".
echo

echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo REMOTE_ADDR = $REMOTE_ADDR

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/10897.html