nginx代理人server结合tomcat采用
相信非常多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。那到底它有什么作用呢?可能非常多人未必了解。
说到反向代理,可能非常多人都听说,但详细什么是反向代理,非常多人预计就不清楚了。
摘一段百度百科上的描写叙述:
- 反向代理(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时。
实际上就改动两个地方:
- ;
- location / {
- proxy_pass http://localhost:8080
- }
我们就改动了上面两个地方,我的tomcat在8080port,能够依据自己的须要改动。这里有一个新元素proxy_pass。它表示代理路径,相当于转发,而不像之前说的root必须指定一个目录。
此时我们改动了文件,是不是就意思着必须先关了nginx再又一次启动了,事实上不必,nginx能够又一次载入文件的。
我们直接执行:
- nginx -s reload
高兴得太早了,我们发现有一个错误:
什么来的。45行发现错误。不希望在那一行找到},于是我们细致找,发现我们增加的proxy_pass非常奇怪,没有;号结尾。这就是问题了。直接改动,然后再执行一下,发现没错误,OK了。
假设不想直接载入,而仅仅是想看看自己的配置文件有没有问题。能够直接输入:
- 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这个元素,而且涉及到一部分正则,但不难:
- location ~ \.jsp$ {
- proxy_pass http://localhost:8080;
- }
- location ~ \.(html|js|css|png|gif)$ {
- root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;
- }
我们先要去掉之前配的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就有大用途了。
我们把之前的第一个样例,即所有都代理的改动一下:
最后改动例如以下:
- upstream local_tomcat {
- server localhost:8080;
- }
- server{
- location / {
- proxy_pass http://local_tomcat;
- }
- #......其它省略
- }
我们在server外加入了一个upstream,而直接在proxy_pass里面直接用http://+upstream的名称来使用。
我们还是直接来http://localhost,还是和第一个一样的效果。全部链接都没问题,说明我们配置正确。
upstream中的server元素必需要注意。不能加http://,但proxy_pass中必须加。
我们刚才说能够在一个server挂了的情况下连到另外一个,那怎么弄呢?
事实上非常easy,在upstream中的local_tomcat中配置多一个server。比方我如今弄多一个jetty。port在9999,所以我们配置例如以下:
- upstream local_tomcat {
- server localhost:8080;
- server localhost:9999;
- }
此时,我们关闭tomcat,而仅仅开jetty。我们来执行http://localhost看看效果:
我们看到它请求到了jetty的页面,但因为jetty的机制,这时没有显示jetty主页,这个我们先无论。
但我们的在一个server挂的情况下自己主动使用另外一个的功能实现了。
但有时我们就不想它挂的时候訪问另外一个,而仅仅是希望一个服务器訪问的机会比另外一个大,这个能够在server最后加上一个weight=数字来指定。数字越大,表明请求到的机会越大。
- upstream local_tomcat {
- ;
- ;
- }
这时我们给了jetty一个更高的权值,让它更有机会訪问到。实际上当我们刷新http://localhost訪问的时候发现jetty訪问机率大非常多,tomcat差点儿没机会訪问,普通情况下。假设我们必须这样用。不要相关太大,以免一个server负载太大。
当然,server另一些其它的元素,比方down表示临时不用到该服务器等等。这些能够參考nginx的wiki。或许写了一大堆,有人会有问题。那nginx怎么关闭呢?这倒是个问题,事实上直接执行nginx -s stop就能够关闭了。
基本上nginx使用如此,我们假设,在深入学习后,再次使用。
版权声明:本文博主原创文章,博客,未经同意不得转载。
nginx代理人server结合tomcat采用的更多相关文章
- nginx https反向代理 tomcat
前端nginx配置 server { listen ; server_name localhost; listen ssl; ssl_certificate /usr/local/nginx/sslk ...
- Nginx反向代理到Tomcat服务器
在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat ...
- Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群
Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...
- Nginx反向代理实现Tomcat负载均衡
这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...
- 一脸懵逼学习Nginx及其安装,Tomcat的安装
1:Nginx的相关概念知识: 1.1:反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到 ...
- 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息【转】
转自: 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息 - 追马 - 51CTO技术博客http://lovelace.blog.51 ...
- [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍
首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...
- 【转】Nginx反向代理转发tomcat
http://blog.csdn.net/mlc1218559742/article/details/53117520 最近刚接触nginx,在网上查阅了相关资料,看到最多的形容nginx的词就是反向 ...
- (总结)Nginx与Apache、Tomcat、Resin动静分离核心配置
PS:近来有几个刚使用nginx的新童鞋老问我,nginx+fastcgi不够稳定,偶尔出现502错误,怎么解决?本人使用nginx也有3年多了,也认为php-fpm模块不够稳定,在访问量不大的时候没 ...
随机推荐
- debug(fmt,args...)调试
1.定义宏(debug.h) #ifndef __DEBUG__H #define __DEBUG__H #include <stdio.h> #ifdef DEBUG #define d ...
- 通过阅读ASP.NET MVC5 框架解密 路由的一点心得
路由: 1.在ASP.NET中路由不专属与ASP.NET MVC,因为路由(Route)是在system.web 命名空间下的,所以传统的WebForm也可以使用路由. 2.什么叫做路由 采用某种机制 ...
- NET Core站点部署到Linux服务器
.NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上 今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站 ...
- Quartz1.8.5例子(二)
/* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...
- objective-C: nonatomic retain copy assgin 等属性详解
http://my.oschina.net/u/728866/blog/90798 property,可以提供的功能有:提供成员变量的访问方法的声明.控制成员变量的访问权限.控制多线程时成员变量的访问 ...
- 趣味C程序100.1 .1 绘制余弦曲线
说明:1.本问题来源于<C语言经典.趣味.实用程序设计编程百例精解>,所有程序为本人自己编写.与原程序不同之处作有标记. 2.本系列所有程序均使用codeblocks编译,操作系统为Win ...
- JQUERY 插件开发——LAZYLOADIMG(预加载和延迟加载图片)
开发背景 本插件开发是近期写的最后一个插件了,接下来我想把最近研究的redis最为一个系列阐述下.当然Jquery插件开发是我个人爱好,我不会停止,在将来的开发中我会继续完善,当然也会坚持写这个系列的 ...
- 【HDU3341】 Lost's revenge (AC自动机+状压DP)
Lost's revenge Time Limit: 5000MS Memory Limit: 65535KB 64bit IO Format: %I64d & %I64u Descripti ...
- 【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 ...
- Spring MVC 解读——View,ViewResolver(转)
上一篇文章(1)(2)分析了Spring是如何调用和执行控制器方法,以及处理返回结果的,现在我们就分析下Spring如何解析返回的结果生成响应的视图. 一.概念理解 View ---View接口表示一 ...