实战Nginx与Perl、Java的安装与配置
Nginx本身是一个静态的HTTP服务器和反向代理服务器,它不支持动态页面,所谓的Nginx对动态程序的支持都是
通过反向代理功能实现的。下面要讲述的Nginx对Perl和JSP的支持,就是通过Nginx的反向代理功能完成的。
Nginx对Perl和JSP的支持在实现细节上可能有一定差别,但是实现原理是完全一样的。
,这假定Nginx的安装路径为/usr/local/nginx。
Nginx的安装
(1)
openssl-devel-0.9.8e-12.el5,gcc,zlib-devel-1.2.3-3
(2)
 pcre-8.02.tar.gz -C /usr/src/
cd /usr/src/
cd pcre-8.02/
 ./configure 
make && make install
(3)
tar -zxvf nginx-0.7.65.tar.gz -C /usr/src/
cd /usr/src/nginx-0.7.65/
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module
make
make install
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/0.7.65
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-
http_gzip_static_module
 
vim nginx.conf
  1 
  2 user  nobody;
  3 worker_processes  1;
  4 
  5 #error_log  logs/error.log;
  6 #error_log  logs/error.log  notice;
  7 error_log  logs/error.log  info;
  8 
  9 pid        logs/nginx.pid;
 10 
 11 
 12 events {
 13     worker_connections  1024;
 14 }
 15 
 16 
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20 
 21     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 22                       '$status $body_bytes_sent "$http_referer" '
 23                       '"$http_user_agent" "$http_x_forwarded_for"';
 24 
 25     #access_log  logs/access.log  main;
 26 
 27     sendfile        on;
 28     #tcp_nopush     on;
 29 
 30     #keepalive_timeout  0;
 31     keepalive_timeout  65;
 32 
 33     #gzip  on;
 34 
 35     server {
 36         listen       80;
 37         server_name  localhost;
 38 
 39         #charset koi8-r;
 40 
 41         access_log  logs/host.access.log  main;
 42 
 43         location / {
 44             root   html;
 45             index  index.html index.htm;
 46         }
 47 
 48         #error_page  404              /404.html;
 49 
 50         # redirect server error pages to the static page /50x.html
 51         #
 52         error_page   500 502 503 504  /50x.html;
 53         location = /50x.html {
 54             root   html;
 55         }
开启服务
/usr/local/nginx/sbin/nginx 
ps -ef | grep nginx
root     10890     1  0 21:40 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   10891 10890  0 21:40 ?        00:00:00 nginx: worker process      
root     10893  3874  0 21:40 pts/0    00:00:00 grep nginx
关闭服务
ps -ef | grep nginx
root     10890     1  0 21:40 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   10891 10890  0 21:40 ?        00:00:00 nginx: worker process      
root     10906  3874  0 21:44 pts/0    00:00:00 grep nginx
kill 10890
一、Perl(FastCGI)的安装
1.获取wrapper程序
读者可以从http://www.nginx.eu/nginx-fcgi/ 上下载nginx-fcgi.txt文件,然后将其命名为nginx-fcgi.pl并
放到/usr/local/nginx目录下。nginx-fcgi.pl是一个用Perl脚本写的wrapper实例,所以,操作系统必须要安装
Perl程序以及相关模块。 
2.安装相关的系统支持模块
可以从http://search.cpan.org下载所需的相应模块,然后进行安装。
(1)安装FCGI模块
tar zxvf FCGI-0.71.tar.gz  
cd FCGI-0.71 
perl Makefile.PL 
make 
make install 
(2)安装IO模块
tar -xvzf IO-1.25.tar.gz 
cd IO-1.25 
perl Makefile.PL 
make  
make install 
(3)安装IO::ALL模块
tar -xvzf IO-All-0.39.tar.gz 
cd IO-ALL-0.39 
perl Makefile.PL 
make  
make install 
3.编写nginx-fcgi启动脚本
仅仅有wrapper文件是不够的,还需要一个脚本来创建socket、启动wrapper以及将wrapper和socket绑定,下面
通过
vim nginx-fcgi  
    #!/bin/bash 
    nginxroot=/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 
接着通过浏览器访问test.cgi文件,如果显示与下面类似的信息,表明Nginx+Perl环境搭建成功。:
CGI/1.0 test script report: 
argc is 1. argv is . 
SERVER_SOFTWARE = nginx/0.7.65 
SERVER_NAME = localhost 
GATEWAY_INTERFACE = CGI/1.1 
SERVER_PROTOCOL = HTTP/1.1 
SERVER_PORT = 8000 
REQUEST_METHOD = GET 
REMOTE_ADDR = 125.76.159.197