Nginx+Tomcat整合的安装与配置(win.linux)

//原帖
http://zyjustin9.iteye.com/blog/2017394

上面是windows系统,linux直接下拉到分割线.

相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢?可能很多人未必了解。

说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了。摘一段百度百科上的描述:

  1. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

这里讲得很直白。反向代理方式实际上就是一台负责转发的代理 服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx 完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完 成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处 理的是tomcat。

说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。

1)官网地址:http://nginx.org/en/download.html可以到这里去下。

  windows版本下进入到nginx文件夹,直接start nginx就OK了。

  比如我下载后放在D:\software
\developerTools\server\nginx-1.1.7,直接cmd后cd D:\software\developerTools
\server\nginx-1.1.7,有些不习惯命令行的可能会奇怪,它没有进行到那个文件夹。windows并不会在分区间跳转,除非你自己指定
了。所以我们要直接d:如  下:

  

  然后,我们直接start nginx,这里也许你会看到一个窗口一闪而过,根据我们使用tomcat的经验,如果一闪而过,证明有错误了,是吧?但实际上不是。

  

  此时我们打开任务管理器,可以看到两个nginx.exe在那里好好的。这说明我们已经启动了,至于为什么两个,我们这里不深究。

  

  现在,我们已经启动了nginx,来看看启动后的nginx是怎样的。直接访问http://localhost可以看到:

  

  我们可以看到nginx启动成功,现在访问是直接进到nginx的目录里面了。

  那么这些实际上是在哪里配置的。这就涉及到nginx的一个重要配置文件nginx.conf了。

2)我们可以看到nginx文件夹内有一个conf文件夹,其中有好几个文件,其他先不管,我们打开nginx.conf,可以看到一段:

这段代码在server里面,相当于一个代理服务器,当然可以配置多个。

下面我们仔细来分析一下:

  listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。

  server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。

  location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里

  root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。

  index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。

  下面的error_page是代表错误的页面,这里我们暂时不用,先不管它。

  那我们知道了具体的配置了,怎么让它访问localhost时转到tomcat时。实际上就修改两个地方:

  1. server_name localhost:8080;
  2. location / {
  3. proxy_pass http://localhost:8080;
  4. }

  我们就修改了上面两个地方,我的tomcat在8080端口,可以根据自己的需要修改。这里有一个新元素proxy_pass,它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹。

  此时我们修改了文件,是不是就意思着必须先关了nginx再重新启动了,其实不必,nginx可以重新加载文件的。

  我们直接运行:

  1. nginx -s reload

如果不想直接加载,而只是想看看自己的配置文件有没有问题,可以直接输入:

  1. nginx -t

这可以检查配置文件中是否有错。 下面我们所有的修改都假设我们修改完成后运行了nginx -s reload进行重新加载配置文件,请注意。

一切没问题了,然后我们再重新打开http://localhost,我们看到下面的页面:

  

这时,我们发现它并不是刚才的welcome页面了,而是tomcat的管理页面了,不管我们点击什么链接都是没问题的,相当于直接访问http://localhost:8080一样。

3)上面我们直接试了一个小例子,让nginx进行转发,即所
谓的反向代理。但实际上我们的需求不会是这样的,我们需要分文件类型来进行过滤,比如jsp直接给tomcat处理,因为nginx并不是servlet
容器,没办法处理JSP,而html,js,css这些不需要处理的,直接给nginx进  行缓存。

  下面我们来进行一下配置,让JSP页面直接给tomcat,而html,png等一些图片和JS等直接给nginx进行缓存。

  这时最主要用的还是location这个元素,并且涉及到一部分正则,但不难:

  1. location ~ \.jsp$ {
  2. proxy_pass http://localhost:8080;
  3. }
  4. location ~ \.(html|js|css|png|gif)$ {
  5. root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;
  6. }

  我们先要去掉之前配的location /,避免全部请求被拦截了。

  然后我们再来看看http://localhost

  

  当我们不指定jsp页面的时候,它会出现找不到,因为,此时并没有相应的location匹配,所以就会有404错误,这时就跳到了nginx自定义的error页面去了。

  而当我们用http://localhost/index.jsp去访问时,我们看到了熟悉的页面:

  

   而且图片那些都显示正常,因为图片是png的,所以直接在tomcat/webapps/ROOT目录下直接查找,当然,如果我们点击Manager Application HOW-TO这个链接,我们发现:

  

   它还是找不到,为什么呢?因为这是个html页面,但它并不在ROOT目录下,而是在docs目录下,但当我们匹配html时,我们却到ROOT目录下去找,所以还是找不到这个页面。

  一般情况下,如果我们需要用nginx来进行静态文件伺服,一般都会把所有静态文件,html,htm,js,css等都放在同一个文件夹下,这样就不会有tomcat这样的情况了,因为tomcat下的是属于不同的项目,这个我们就没办法了。

3)有些人会说,这些都只会找一台服务器,但如果我们想在一台服务器挂了的时候,自动去找另外一台,这怎么办?这实际上nginx都考虑到了。

  这时,我们之前用的proxy_pass就有大用途了。

  我们把之前的第一个例子,即全部都代理的修改一下:

  最后修改如下:

  1. upstream local_tomcat {
  2. server localhost:8080;
  3. }
  4. server{
  5. location / {
  6. proxy_pass http://local_tomcat;
  7. }
  8. #......其他省略
  9. }

  我们在server外添加了一个upstream,而直接在proxy_pass里面直接用http://+upstream的名称来使用。

  我们还是直接来http://localhost,还是和第一个一样的效果,所有链接都没问题,说明我们配置正确。

  upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加。

  我们刚才说可以在一个服务器挂了的情况下连到另外一个,那怎么弄呢?

  其实很简单,在upstream中的local_tomcat中配置多一个server。比如我现在弄多一个jetty,端口在9999,所以我们配置如下:

  1. upstream local_tomcat {
  2. server localhost:8080;
  3. server localhost:9999;
  4. }

此时,我们关闭tomcat,而只开jetty。我们来运行http://localhost看看效果:

  

我们看到它请求到了jetty的页面,但由于jetty的机制,这时没有显示jetty主页,这个我们先不管。但我们的在一个服务器挂的情况下自动使用另外一个的功能实现了。

但有时我们就不想它挂的时候访问另外一个,而只是希望一个服务器访问的机会比另外一个大,这个可以在server最后加上一个weight=数字来指定,数字越大,表明请求到的机会越大。

  1. upstream local_tomcat {
  2. server localhost:8080 weight=1;
  3. server localhost:9999 weight=5;
  4. }

这时我们给了jetty一个更高的权值,让它更有机会访问到,实际上当我们刷新http://localhost访问的时候发现jetty访问机率大很多,tomcat几乎没机会访问,一般情况下,如果我们必须这样用,不要相关太大,以免一个服务器负载太大。

当然,server还有一些其他的元素,比如down表示暂时不用到该服务器等等。这些可以参考nginx的wiki。也许写了一大堆,有人会有问题,那nginx怎么关闭呢?这倒是个问题,其实直接运行nginx -s stop就可以关闭了。


  Linux系统:


节选自某电子商务网站JSP应用服务器的环境搭建实施文档,文中的IP和域名进行了修改。JSP应用服务器由Nginx+Tomcat整合而成,而新的Tomcat 7.0相对于以前的版本来说,它的新特征如下:

  • 使用随机数防止跨站脚本攻击;
  • 改变了安全认证中的jessionid的机制,防止Session攻击;
  • 可进行内存泄露的侦测和防范;
  • 在war文件外使用别名去存储静态内容;
  • 支持Servlet 3.0、JSP 2.2和JSP-EL 2.2;
  • 更容易将Tomcat内嵌到应用中去,比如JBoss;
  • 异步日志。

其中第三点是我最为关注的,在以前的版本中Tomcat均存在着内存泄露的情况,我希望能在新版本中有所改善。

Nginx与Tomcat整合的好处如下所示:

  • 静态分离,加快用户访问网站的速度。
  • 整个负载均衡层和Web层的工作流程为LVS/DR+Keeaplived→Nginx反向代理(动静分离)→Tomcat集群,可以保证整个网站不会因为某一台LVS或Nginx+tomcat机器挂掉而影响网站的运营。
  • Nginx稳定,宕机的可能性微乎其乎。

下面是项目实施的具体步骤——

  由于服务器均采用的是最小化安装,所以先安装一些基础的编译库,命令如下:

 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel 

(1)首先分别在xxx.xxx.xxx.146和xxx.xxx.xxx.147上安装Nginx 0.8.56和Tomcat 7.0,然后整合它们。

  在安装Tomcat 7.0之前,必须先安装JDK,其下载地址为  https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter

  由于我的服务器都是CentOS x86_64,所以选择了jdk-6u18-linux-x64.bin软件包,记得还是要将其放在/usr/local/src目录下,方便以后的工作规划。

下载完成后,修改jdk-6u18-linux-x64.bin为可执行,并运行它:

cd /usr/local/src
chmod +x jdk-6u18-linux-x64.bin
./jdk-6u18-linux-x64
mv jdk1.6.0_18 /usr/local/jdk

接着配置系统的Java运行环境,我是通过修改/etc/profile文件来实现,修改内容如下所示:

JAVA_HOME="/usr/local/jdk"
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH=".:$PATH:$JAVA_HOME/bin"
CATALINA_HOME="/usr/local/tomcat"
export JAVA_HOME CATALINA_HOME

保存退出后,执行以下命令让环境立即生效:

 source /etc/profile  

然后下载并安装apache-tomat7.0.12,如下所示。

cd /usr/local/src/
wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-7/v7.0.12/bin/apache-tomcat-7.0.12.tar.gz
tar zxvf apache-tomcat-7.0.12.tar.gz
mv apache-tomcat-7.0.12 /usr/local/tomcat/
cp –rf /usr/local/tomcat/webapps /data/htdocs/www
vim /usr/local/tomcat/conf/server.xml

修改tomcat的根路径位置,我的网站地址为/data/htdocs/www/shop,这个虚拟主机需要在/usr/local/tomcat/conf/server.xml里指定,改动后的内容如下所示:

<Host name="www.51cto.com"  appBase="webapps"   unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="/data/htdocs/www/shop/" />

如果我们要继续增加虚拟主机,按照如上格式继续添加内容即可,Host name后面接虚拟主机名称,docBase后面接虚拟主机对应的路径位置。

安装完成后,启动tomcat,默认即监听了8080端口,启动命令如下:

/usr/local/tomcat/bin/startup.sh

成功运行后,用lsof-i:80来进行验证,如下所示:

lsof -i:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE NODE NAME
java    23731 root   40u  IPv6 3347645       TCP *:webcache (LISTEN)

最后安装pcre8.1.0及Nginx0.8.56,整合Nginx0.8.56与Tomcat7.0.12, Nginx0.8.56的安装过程可参考前面的内容,为了节约篇幅就不再详细说明了。静态HTML页面、图片、CSS等由Nginx来处理,jsp、do 内容由后端的Tomcat处理,nginx.conf配置文件的内容如下所示(这里为了调试方便,我们首先将域名www.51cto.com指向了 xxx.xxx.xxx.146,另一台Web配置跟xxx.xxx.xxx.146一样的,我这里以xxx.xxx.xxx.146举例说明,等此架构 中的Web环境均顺利后,再将域名www.51cto.com指向我们的VIP地址):

user  www www;
worker_processes 8;
error_log  /usr/local/webserver/nginx/logs/nginx_error.log  crit;
pid        /usr/local/webserver/nginx/nginx.pid;
 #Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
#工作模式及连接数上限
events
{
 use epoll;
 worker_connections 65535;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http
{
  #设定mime类型
  include       mime.types;
  default_type  application/octet-stream;
  #charset  gb2312;
  #设定请求缓冲
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 300m;
  sendfile on;
  tcp_nopush     on;
  keepalive_timeout 60;
  tcp_nodelay on;
  server_tokens off;
   client_body_buffer_size 512k;
  proxy_connect_timeout   5;
  proxy_send_timeout      60;
  proxy_read_timeout      5;
  proxy_buffer_size       16k;
  proxy_buffers           4 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;
  #  fastcgi_connect_timeout 300;
  #  fastcgi_send_timeout 300;
  #  fastcgi_read_timeout 300;
  #  fastcgi_buffer_size 64k;
  #  fastcgi_buffers 4 64k;
  #  fastcgi_busy_buffers_size 128k;
  #  fastcgi_temp_file_write_size 128k;
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on; 

  #limit_zone  crawler  $binary_remote_addr  10m;

  ###禁止通过ip访问站点
  server{
 server_name _;
 return 404;
  }
  server
   {
 listen       80;
 server_name  www.51cto.com;
 index index.html index.htm index.jsp index.do;#设定访问的默认首页地址
 root  /data/htdocs/www/shop;#设定网站的资源存放路径
 #limit_conn   crawler  20;
 if (-d $request_filename)
  {
   rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
  }
  #所有jsp的页面均交由tomcat处理
  location ~ \.(jsp|jspx|do)?$ {
   proxy_set_header  Host $host;
  proxy_set_header  X-Real-IP  $remote_addr;
   proxy_pass http://127.0.0.1:8080;#转向tomcat处理
 }
 location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ #设定访问静态文件直接读取不经过tomcat
 {
  expires      30d;
 }
 location ~ .*\.(js|css)?$
 {
  expires      1h;
 }      

  #定义访问日志的写入格式
 log_format  wwwlog  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
  ‘$status $body_bytes_sent "$http_referer" ‘
  ‘"$http_user_agent" $http_x_forwarded_for‘;
 access_log  /data/logs/www_nginx.log wwwlog;#设定访问日志的存放路径
   }
}

配置完成后,我们用如下命令启动Nginx进程,让其监听80端口,如下所示:

 /usr/local/webserver/nginx/sbin/nginx  

然后我们在/data/htdocs/www/shop/下面写一段Java代码,验证以上的配置是否成功,写完后我们可以用cat 命令来查看/data/htdocs/www/shop/mem.jsp文件,文件内容如下所示:

<%
Runtime lRuntime = Runtime.getRuntime();
out.println("*** BEGIN MEMORY STATISTICS ***<br/>");
out.println("Free Memory: "+lRuntime.freeMemory()+"<br/>");
out.println("Max   Memory: "+lRuntime.maxMemory()+"<br/>");
out.println("Total Memory: "+lRuntime.totalMemory()+"<br/>");
out.println("Available Processors : "+lRuntime.availableProcessors()+"<br/>");
out.println("*** END MEMORY STATISTICS ***");
%>

我们可以输入http://www.51cto.com/mem.jsp来验证nginx+tomcat整合成功了。

时间: 2024-10-03 13:45:14

Nginx+Tomcat整合的安装与配置(win.linux)的相关文章

Windows下Nginx+Tomcat整合的安装与配置

原帖:http://zyjustin9.iteye.com/blog/2017394 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了.摘一段百度百科上的描述: Html代码   反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给inte

Nginx学习指南之安装与配置

一.简介 Nginx [engine x]是Igor Sysoev编写的一个HTTP和反向代理服务器,另外它可以作为邮件代理服务器.Nginx已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex,Mail.Ru.VKontakte,以及Rambler,在国内使用Nginx作为Web Server,Cache Server,Proxy Server网站包括百度,新浪,腾讯,网易,机锋网等,根据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48使用Ngin

Windows Azure+Windows+Linux多环境下Tomcat服务的安装及配置集合

Windows Azure+Windows+Linux多环境下的Tomcat服务的安装及配置集合 说到Tomcat服务,相信大家都很熟悉了,当然也这包括安装及配置:我们都知道Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求.实际上To

FastDFS + Nginx 反向代理缓存 安装与配置

FastDFS + Nginx 反向代理缓存 安装与配置 作者:斯巴达克斯 时间:March 26, 2015 分类:存储 操作系统 CentOS release 6.5 (Final) 64 nginx相关软件 nginx-1.4.7 下载地址: http://nginx.org/en/download.html#nginx清除缓存模块 ngx_cache_purge-2.1 http://labs.frickle.com/nginx_ngx_cache_purge/pcre-8.36 ftp

CentOS 6.6下JDK1.7安装与配置(Linux)经典入门详解案例

最近用的linux较多,在网站找了一些关于linux环境下jdk安装的教程,过程是有的但是好多细节都没有表现出来,所以我花了点时间总结了一下,希望对大家都有帮助... CentOS下JDK1.7安装与配置(Linux) 一.安装SUN公司的JDK之前先要检查系统中是否已经安装JDK.一般来说Centos系统默认会安装OpenJDK,但OpenJDK部分内容与SUN JDK不兼容,因此打算重新安装SUN JDK1.7来开发. 1.我们可以通过rpm命令查看OpenJDK具体版本信息 #rpm -q

Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016

Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Python>一书,为了解决很多同学对英文书的恐惧,解决看书之后实战过程中遇到的问题而作.由于原书很多地方过于简略,笔者根据实际测试情况和最新的技术发展对内容做了大量的变更,当然最重要的

转:Nginx+Apache环境的安装与配置

转:http://www.server110.com/nginx/201404/8817.html 我们依然尽可能采用yum来安装我们需要的软件,由系统官方维护的软件,其安全性和稳定性都值得信赖,并且容易管理,升级方便,但是在CentOS和RHEL的官方yum源中暂时没有Nginx等软件包,所以我们需要使用EPEL的yum源.EPEL是什么,EPEL的yum源怎么添加,点击这里查看. 本文将要介绍的Nginx+Apache结构,其实就是Nginx做前端,Apache做后端,充分发挥他们各自的优势

nginx+tomcat 反向代理 负载均衡配置

1.nginx的安装和配置见:http://www.cnblogs.com/ll409546297/p/6795362.html 2.tomcat部署项目到对应的服务器上面并启动,不详解 3.在nginx中配置nginx.conf文件: user nobody; worker_processes 4; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid

CentOS 7 Tomcat服务的安装与配置

3422人阅读 http://blog.51cto.com/13525470/2073657 一.Linux下的Java运行环境 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于个人PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网,同时拥有全球最大的