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模块不够稳定,在访问量不大的时候没 ...
随机推荐
- 博客系统-3.0CodeIgniter系统SAE版本的配置 application/config/
autoload.php(系统启动时自动加载的文件:包,类库,驱动,方法助手,配置) $autoload['libraries'] = array('database', 'access', 'pag ...
- Python 手册——解释器及其环境
错误处理: 有错误发生时,解释器打印一个错误信息和栈跟踪(监视)器?.交互模式下,它返回主提示符,如果从文件 输入执行,它在打印栈跟踪器后以非零状态退出.(异常可以由try语句中的except子句来控 ...
- gcc/g++编译
1. gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理,生成.i的文件[预处理器cpp] (2).汇编,将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] (3).编译,将 ...
- classpath目录
WEB-INF/ 是资源目录, 客户端不能直接访问, 这话是没错,不过现在的IDE编译器在编译时会把src下的文件(是文件,不是.java)移到WEB-INF/classes下.不过值得注意的是,sp ...
- PAT (Basic Level) 1002. 写出这个数 (20)
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- Nginx配置免费SSL证书StartSSL,解决Firefox不信任问题
先在StartSSL上申请免费一年的SSL证书,具体过程网上很多教程.然后把申请到的key和crt文件上传到服务器,比如/usr/local/nginx/certs/. Nginx配置SSL证书 直接 ...
- webserver<1>
1. 实现基础的信号处理 sigaction使用前一定内存清零 2. 实现基础的进程模型 wait 等待子进程结束 #include <stdio.h> #include <unis ...
- Contest20140906 反思
这次考试最大的失误就是把最简单的一道题RE了,原因是我在main()函数中开了一个2^19的数组,这种做法在linux下没有任何问题,然而放到windows下评测,就会出现栈溢出的错误. 单题总结: ...
- 安卓天天练练(十五)改造BasicSyncAdapter
谷歌的官方示例BasicSyncAdapter是Android Studio工程, 把它依样画葫芦到Eclipse上,然后改造成我需要的样式. 看官方示例源码的时候,看到EntryListActivi ...
- 优雅的让Fragment监听返回键
转载请注明出处:http://write.blog.csdn.net/postedit/40507387 Activity可以很容易的得到物理返回键的监听事件,而Fragment却不能.假设Fragm ...