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

说到反向代理,可能非常多人都听说,但详细什么是反向代理,非常多人预计就不清楚了。

摘一段百度百科上的描写叙述:

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

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

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

闲话就不多说了。我们直接来看看nginx怎么使用。

1)要用到的软件当然要下载啦。

到nginx官网下一个。http://nginx.org/en/download.html能够到这里去下。

我如今用的版本号是1.1.7。但基本上以后的版本号都兼容,并且我们用到的并不涉及到太底层的,应该不会有什么变化。

这里,因为我的是windows,当然下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,这时就能够启动tomcat,想着直接訪问http://localhost就能够直接訪问tomcat了。

先不急,我们来看看启动后的nginx是如何的。直接訪问http://localhost能够看到:

我们能够看到nginx启动成功,如今訪问是直接进到nginx的文件夹里面了。

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

2)我们能够看到nginx目录内有一个conf目录。当中有好几个文件。其它先无论。我们打开nginx.conf,能够看到一段:

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

以下我们细致来分析一下:

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

server_name:表示监听到之后须要转到哪里去,这时我们直接转到本地。这时是直接到nginx目录内。

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

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

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

以下的error_page是代表错误的页面,这里我们临时不用,先无论它。

那我们知道了详细的配置了,怎么让它訪问localhost时转到tomcat时。

实际上就改动两个地方:

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

我们就改动了上面两个地方,我的tomcat在8080port,能够依据自己的须要改动。这里有一个新元素proxy_pass。它表示代理路径,相当于转发,而不像之前说的root必须指定一个目录。

此时我们改动了文件,是不是就意思着必须先关了nginx再又一次启动了,事实上不必,nginx能够又一次载入文件的。

我们直接执行:

  1. nginx -s reload

高兴得太早了,我们发现有一个错误:

什么来的。45行发现错误。不希望在那一行找到},于是我们细致找,发现我们增加的proxy_pass非常奇怪,没有;号结尾。这就是问题了。直接改动,然后再执行一下,发现没错误,OK了。

假设不想直接载入,而仅仅是想看看自己的配置文件有没有问题。能够直接输入:

  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)有些人会说。这些都仅仅会找一台server,但假设我们想在一台server挂了的时候,自己主动去找另外一台,这怎么办?这实际上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中必须加。

我们刚才说能够在一个server挂了的情况下连到另外一个,那怎么弄呢?

事实上非常easy,在upstream中的local_tomcat中配置多一个server。比方我如今弄多一个jetty。port在9999,所以我们配置例如以下:

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

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

我们看到它请求到了jetty的页面,但因为jetty的机制,这时没有显示jetty主页,这个我们先无论。

但我们的在一个server挂的情况下自己主动使用另外一个的功能实现了。

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

  1. upstream local_tomcat {
  2. ;
  3. ;
  4. }

这时我们给了jetty一个更高的权值,让它更有机会訪问到。实际上当我们刷新http://localhost訪问的时候发现jetty訪问机率大非常多,tomcat差点儿没机会訪问,普通情况下。假设我们必须这样用。不要相关太大,以免一个server负载太大。

当然,server另一些其它的元素,比方down表示临时不用到该服务器等等。这些能够參考nginx的wiki。或许写了一大堆,有人会有问题。那nginx怎么关闭呢?这倒是个问题,事实上直接执行nginx -s stop就能够关闭了。

基本上nginx使用如此,我们假设,在深入学习后,再次使用。

版权声明:本文博主原创文章,博客,未经同意不得转载。

nginx代理人server结合tomcat采用的更多相关文章

  1. nginx https反向代理 tomcat

    前端nginx配置 server { listen ; server_name localhost; listen ssl; ssl_certificate /usr/local/nginx/sslk ...

  2. Nginx反向代理到Tomcat服务器

    在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat ...

  3. Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群

    Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...

  4. Nginx反向代理实现Tomcat负载均衡

    这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...

  5. 一脸懵逼学习Nginx及其安装,Tomcat的安装

    1:Nginx的相关概念知识: 1.1:反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到 ...

  6. 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息【转】

    转自: 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息 - 追马 - 51CTO技术博客http://lovelace.blog.51 ...

  7. [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  8. 【转】Nginx反向代理转发tomcat

    http://blog.csdn.net/mlc1218559742/article/details/53117520 最近刚接触nginx,在网上查阅了相关资料,看到最多的形容nginx的词就是反向 ...

  9. (总结)Nginx与Apache、Tomcat、Resin动静分离核心配置

    PS:近来有几个刚使用nginx的新童鞋老问我,nginx+fastcgi不够稳定,偶尔出现502错误,怎么解决?本人使用nginx也有3年多了,也认为php-fpm模块不够稳定,在访问量不大的时候没 ...

随机推荐

  1. debug(fmt,args...)调试

    1.定义宏(debug.h) #ifndef __DEBUG__H #define __DEBUG__H #include <stdio.h> #ifdef DEBUG #define d ...

  2. 通过阅读ASP.NET MVC5 框架解密 路由的一点心得

    路由: 1.在ASP.NET中路由不专属与ASP.NET MVC,因为路由(Route)是在system.web 命名空间下的,所以传统的WebForm也可以使用路由. 2.什么叫做路由 采用某种机制 ...

  3. NET Core站点部署到Linux服务器

    .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上 今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站 ...

  4. Quartz1.8.5例子(二)

    /* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...

  5. objective-C: nonatomic retain copy assgin 等属性详解

    http://my.oschina.net/u/728866/blog/90798 property,可以提供的功能有:提供成员变量的访问方法的声明.控制成员变量的访问权限.控制多线程时成员变量的访问 ...

  6. 趣味C程序100.1 .1 绘制余弦曲线

    说明:1.本问题来源于<C语言经典.趣味.实用程序设计编程百例精解>,所有程序为本人自己编写.与原程序不同之处作有标记. 2.本系列所有程序均使用codeblocks编译,操作系统为Win ...

  7. JQUERY 插件开发——LAZYLOADIMG(预加载和延迟加载图片)

    开发背景 本插件开发是近期写的最后一个插件了,接下来我想把最近研究的redis最为一个系列阐述下.当然Jquery插件开发是我个人爱好,我不会停止,在将来的开发中我会继续完善,当然也会坚持写这个系列的 ...

  8. 【HDU3341】 Lost's revenge (AC自动机+状压DP)

    Lost's revenge Time Limit: 5000MS Memory Limit: 65535KB 64bit IO Format: %I64d & %I64u Descripti ...

  9. 【UVA11478】Halum (最短路解差分约束)

    题目: Sample Input2 11 2 102 11 2 -103 31 2 42 3 23 1 54 52 3 44 2 53 4 23 1 01 2 -1Sample OutputInfin ...

  10. Spring MVC 解读——View,ViewResolver(转)

    上一篇文章(1)(2)分析了Spring是如何调用和执行控制器方法,以及处理返回结果的,现在我们就分析下Spring如何解析返回的结果生成响应的视图. 一.概念理解 View ---View接口表示一 ...