二、.以第一种实现:动态与静态页面分离实现
Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tmcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。所以最好的搭配是静态由Nginx处理,动态交给Tomcat
这里假定Tomcat服务器的IP地址为10.150.1.109,同时tomcat服务器开放的服务端口为8080,Nginx相关配置代码如下:
server {
listen 80;
server_name;
root/web/www/html;
location /img/{
alias/web/www/html/img/;
}
location ~ (\.jsp)|(\.do)$ {
proxy_pass:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
在这个实例中,首先定义了一个虚拟主机,然后通过location指令将/web/www/html/img/目录下的静态文件交给Nginx来完成,最后一个location指令将所有以.jsp、.do结尾的文件都交给Tomcat服务器的8080端口来处理,即 10.150.1.109:8080。
需要特别注意的是,在location指令中使用正则表达式后,proxy_pass后面的代理路径不能含有地址链接,也就是不能写成 10.150.1.109:8080/,或者类似 10.150.1.109:8080/jsp的形式。在location指令不使用正则表达式时,没有此限制。
三、以第二种实现:多个Tomcat,Nginx做负载均衡实例
这里假定有三台Tomcat服务器,分别开放不同的端口,地址分别是:
10.150.1.109:8000
10.150.1.110:8080
10.150.1.112:8090
Nginx的相关配置代码如下:
upstream mytomcats {
server 10.150.1.109:8000;
server 10.150.1.110:8080;
server 10.150.1.112:8090;
}
server {
listen 80;
server_name;
location ~*\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
root/web/www/html/;
}
location / {
proxy_pass;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
在这个实例中,首先通过upstream定义一个负载均衡组,组名为mytomcats,组的成员就是上面指定的三台Tomcat服务器;接着通过server指令定义一个的虚拟主机;然后通过location指令以正则表达式的方式将指定类型的文件全部交给Nginx去处理;最后将其它所有请求全部交给负载均衡组来处理。
这里还有一点需要注意,如果在location指令使用正则表达式后再用alias指令,nginx是不支持的。
#########################################################################################
说明:现在Perl的网站市面上已经不算多了,但是Perl不只是用于网页,还有很多程序,Nginx本身是一个静态的HTTP服务器和反向代理服务器,它并不支持动态页面,不过可以通过Nginx的反向代理功能实现。下面要讲述的Nginx通过反向代理对Perl和JSP的支持,反向代理的原理大同小异。
Nginx的安装路径为/usr/local/nginx。
Nginx对Perl的支持
一、Perl的安装
1.获取wrapper程序
网上很多文档、教程给的下载连接都已经失效,这里我上传一份最新的。
下载地址:
具体下载目录在 /2013年资料/12月/4日/实现Nginx通过反代对Java环境和Perl环境的支持(附Tomcat)
解压出来将其命名为nginx-fcgi.pl并放到/usr/local/nginx目录下。nginx-fcgi.pl是一个用Perl脚本写的wrapper实例,所以,操作系统必须要安装Perl程序以及相关模块。
2.安装相关的系统支持模块
(1)安装FCGI模块
获取地址:
# tar zxvf FCGI-0.74.tar.gz
# cd FCGI-0.74
# 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.50.tar.gz
# cd IO-All-0.50
# perl Makefile.PL
#make
#make install
3.编写nginx-fcgi启动脚本
仅有wrapper文件是不够的,还需要一个脚本来创建socket、启动wrapper以及将wrapper和socket绑定,下面通过一个shell脚本来完成这一系列工作。
#!/bin/bash
nginxroot=/usr/local/nginx
start ()
{
chownnobody.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
chownnobody.nobody$nginxroot/nginx_fcgi.sh
chmod755$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"stopnginx-fcgi done"
}
case$1 in
stop)
stop
;;
start)
start
;;
restart)
stop
start
;;
*)
echo$"Usage: perl-cgi {start|stop|restart}"
exit1
esac
在nginx-fcgi中,变量nginxroot指定Nginx的安装目录,nginx-fcgi.sock是生成的文件sock, nobody为运行nginx_fcgi进程的用户,这个用户要和运行Nginx的用户一致。
配置完脚本后,将此文件放到/usr/local/nginx目录下,接着通过如下方式管理nginx-fcgi进程。
#chmod 755 /usr/local/nginx/nginx-fcgi.pl
#chmod 755 /usr/local/nginx/nginx-fcgi
#/usr/local/nginx/nginx-fcgi start|stop|restart