Nginx高性能Web服务器:Nginx与jsp、asp.net、perl的安装与配置(第五章)

网友投稿 829 2023-03-07

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Nginx高性能Web服务器:Nginx与jsp、asp.net、perl的安装与配置(第五章)

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

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

一、Perl(FastCGI)的安装

1.获取wrapper程序

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=/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 globbingset -fecho "Content-type: text/plain; charset=iso-8859-1"echoecho CGI/1.0 test script report:echoecho argc is $#. argv is "$*".echoecho SERVER_SOFTWARE = $SERVER_SOFTWAREecho SERVER_NAME = $SERVER_NAMEecho GATEWAY_INTERFACE = $GATEWAY_INTERFACEecho SERVER_PROTOCOL = $SERVER_PROTOCOLecho SERVER_PORT = $SERVER_PORTecho REQUEST_METHOD = $REQUEST_METHODecho REMOTE_ADDR = $REMOTE_ADDR

接着通过浏览器访问test.cgi文件,如果显示与下面类似的信息,表明Nginx+Perl环境搭建成功。:

CGI/1.0 test script report:argc is 1. argv is .SERVER_SOFTWARE = nginx/0.7.65SERVER_NAME = localhostGATEWAY_INTERFACE = CGI/1.1SERVER_PROTOCOL = HTTP/1.1SERVER_PORT = 8000REQUEST_METHOD = GETREMOTE_ADDR = 125.76.159.197

四、搭建Nginx+Java环境

Apache对Java的支持很灵活,他们的结合度也很高,例如Apache+Tomcat和Apache+resin等都可以实现对Java应用的支持。Apache一般采用一个内置模块来和Java应用服务器打交道。与Apache相比,Nginx在配合Java应用服务器方面,耦合度很低,它只能通过自身的反向代理功能来实现与Java应用服务器的支持,这恰恰是Nginx的一个优点,耦合度的降低,可以使Nginx与Java服务器的相互影响降到最低。

接下来通过Nginx+Tomcat的实例来讲解Nginx对Java的支持。Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tmcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。

Nginx可以通过两种方式来实现与Tomcat的耦合。

 将静态页面请求交给Nginx,动态请求交给后端Tomcat处理。

 将所有请求都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能,进行多台Tomcat服务器的负载均衡。

下面通过两个配置实例分别讲述这两种实现Nginx与Tomcat耦合的方式。

1.动态页面与静态页面分离实例

这里假定Tomcat服务器的IP地址为192.168.12.130,同时tomcat服务器开放的服务端口为8080,Nginx相关配置代码如下:

2.多个Tomcat负载均衡实例

这里假定有三台Tomcat服务器,分别开放不同的端口,地址分别是:

192.168.12.131:8000192.168.12.132:8080192.168.12.133:8090

Nginx的相关配置代码如下:

这里还有一点需要注意,如果在location指令使用正则表达式后再用alias指令,nginx是不支持的。

上一篇:aiops哪家好点(aiops国内厂商)
下一篇:Nginx高性能Web服务器:Nginx与PHP(FastCGI)的安装、配置与优化(第四章)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~