http://blog.csdn.net/mlc1218559742/article/details/53117520

最近刚接触nginx,在网上查阅了相关资料,看到最多的形容nginx的词就是反向代理,反向代理是什么了?一直都不是很理解,于是在网上查了反向代理,下面给出百度百科对反向代理的解释。

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

通过上面的解释很容易理解nginx反向代理的意思,也就是说nginx就相当于代理服务器。客户端发出请求,并不是直接被tomcat服务器接收处理,而是要先经过nginx,nginx再转发给tomcat服务器;tomcat处理完成返回结果后,也是先经过nginx,nginx再返回客户端。在整个过程中,nginx貌似充当了真正的服务器,其实并不是,nginx只是起到了转发的作用。

根据反向代理的特性,我们可以把不需要服务器处理的静态资源(HTML,js,CSS等)直接让nginx处理,JSP等让服务器处理,这样就减轻了服务器的压力。

下面来实现一下利用nginx代理转发tomcat的实例:
1.环境配置
安装nginx,安装步骤可参考: Linux系统下Nginx的安装
安装tomcat,tomcat安装很简单,直接压缩包解压就行,这里就不再细说。

2.运行环境
nginx安装完成并启动过后,在浏览器直接输入Linux系统的IP地址,即可访问,如下所示:

3.配置解析
看到这是不是很好奇,为什么直接输入IP就可以进入nginx,是在哪配置的了?看一下nginx的配置文件,一般默认在nginx文件夹下有个conf文件夹,里面有个nginx.conf,打开发现里面有一段如下配置:

这段代码是在配置文件中的server中,一个server相当于一个代理服务器,可以配置多个server。
里面几个属性的意思分别是:
listen:代表当前代理服务器的访问端口号,默认是80端口。如果要配置多个server,这里的默认端口需要改变,要不然系统不知道进入哪个代理服务。
server_name:表示代理服务需要转发的地址,默认是localhost。
location:表示匹配客户端发送请求的路径,这里“/”代表所有请求的路径都能匹配。
root:表示请求别匹配到后,会在这个文件夹内寻找相应的文件,root对后面静态资源的处理很重要。
index:如果代理没有指定主页,将默认进入index配置下寻找主页,可以配置多个,第一个主页找不到,访问第二个,以此类推。
error_page:代表发生错误后进入的相关错误页面,下面的location也是处理错误的相关配置。

PS:刚刚说的nginx.conf路径在安装的时候是可以通过–conf-path=配置的,我在安装的时候就指定了“/etc/nginx/nginx.conf” 这个路径。但是我还在默认路径下面找配置文件,确实能找到,但是nginx服务用的并不是这个,而是我安装时指定的配置文件。所以在后面的操作中就悲剧了,怎么改配置文件都没反应,一开始以为什么地方配置的不对,浪费了好几个小时的时间,所以在此提醒大家一下。题外话,接下来说正事。

3.配置转发tomcat
转发tomcat的配置很简单,只需要在原来的配置上面修改两个地方,如下:

这里配置的proxy_pass属性表示代理路径,nginx可以直接转发到该链接。
PS:只配置了一个server情况下,server_name可有可无,系统不会加载该配置。有多个server情况下,server_name必须要配置,nginx服务会根据该配置匹配。
修改完配置过后,别急着重启nginx服务,怎么?还有东西要配置? 当然不是,nginx支持热部署,也就是修改配置文件过后,不需要重启服务生效,只需要让nginx重新加载一下即可,很方便吧。如果在加载配置之前想检查一下配置文件是否有语法错误,可以输入“nginx -t”来检查错误。如下:

接下来刷新刚刚访问nginx的页面,发现访问的页面已经变成我们要转发的tomcat了,页面如下:

页面效果和我们直接输入“http://172.16.21.92:8080/”的效果一样。

4.动、静资源分离
上面说了根据nginx反向代理的特性,可以实现客户端访问静态资源时,不请求tomcat服务器,减少服务器压力。要想实现该功能同样的需要配置nginx.conf的server配置,如下:

上面代码新加了一个location配置,用于过滤静态文件,当客户端请求这些静态文件时,nginx会转发到“/usr/local/ROOT/”文件夹下(ROOT文件夹是从tomcat的webapps里面拷贝出来的),从而不需要请求服务器。
这时再刷新访问nginx的页面,发现页面没有变化,但是点击tomcat首页"Security Considerations HOW-TO"连接,发现报404错误,如下图:

这时为什么了? 原因是这个html页面是在tomcat 的webapps里面的docs文件夹下,但是我们配置静态资源转发路径是到ROOT文件夹下面,nginx找不到HTML文件,所以就报404错误。同时也验证了配置的静态资源与服务器分离是没有问题的。

【转】Nginx反向代理转发tomcat的更多相关文章

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

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

  2. Nginx反向代理实现Tomcat+Jpress和halo

    一.利用Nginx反向代理Jpress+Tomcat 1.环境准备 服务器 IP地址 作用 系统版本 Proxy代理服务器 10.0.0.101 负载均衡Nginx Web服务器 Ubuntu2004 ...

  3. Nginx反向代理实现Tomcat多个应用80端口访问

    应用背景 一般我们在开发时,一个工程里会有多个Web应用,比如一个前台一个后台,那我们就需要配置2个Tomcat服务器,比如一个是http://localhost:8080,一个是http://loc ...

  4. nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决

    Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意:今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法 ...

  5. nginx反向代理转发后页面上的js css文件无法加载【原创】

    故障现象:nginx做代理转发后,发现页面上的js css文件无法加载,页面样式乱了. 原因:没有配置静态资源 解决js css文件无法加载无法访问的问题 解决办法: 修改配置文件nginx.conf ...

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

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

  7. 【Nginx】Nginx反向代理转发Host设置

    #事故现场: 服务器A(Nginx服务器):192.168.2.126 服务器B(Web服务器):192.168.2.221 服务器A反向代理服务器B,A配置了upstream为: http { up ...

  8. Nginx反向代理转发Host设置

    默认情况下反向代理是不会转发请求中的Host头部,如果需要转发,则需要配置红色字体表示的选项参数. location /t02 { proxy_set_header Host $host; proxy ...

  9. nginx反向代理转发apache配置 之 cookie去哪儿了?

    在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理. 原理是这样: 方案一: 1. 将域名解析指向测试服务器的地址: 2. 开放相关端口访问 ...

随机推荐

  1. java 并发(五)---AbstractQueuedSynchronizer(3)

           文章代码分析和部分图片来自参考文章 问题 : CountDownLatch  和 CyclicBarrier 的区别 认识 CountDownLatch 分析这个类,首先了解一下它所可以 ...

  2. django通用分页封装

    __author__ = 'Administrator'from django.utils.safestring import mark_safe class Page:    def __init_ ...

  3. Spring cloud ReadTimeout 问题解决

    今天使用Spring cloud @FeignClient 调用远程服务的时候,出现readTimeout问题,通过找资料解决方式如下 在Spring.properties 配置文件中添加如下属性解决 ...

  4. CentOS 7.2 安装 MySQL 5.6.24

    说明:由于甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此CentOS社区采用mysql的MariaDB分支的方式来避开这个风险. 所以需要先加入yum的仓库,才能利用yum来安装my ...

  5. javascript时间格式转换(今天,昨天,前天)

    function transDate() { var $time =document.getElementById("share-time"); var date = $time. ...

  6. 理解mouseover,mouseout,mouseenter,mouseleave

    mouseover定义和用法 当鼠标指针位于元素上方时,会发生 mouseover 事件. 该事件大多数时候会与 mouseout 事件一起使用. mouseover() 方法触发 mouseover ...

  7. 洛谷11月月赛题解(A-C)

    心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...

  8. Django—Model

    Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 Sqlite3.MySQL.PostgreSQL 等数据库,只需要在 settings.py ...

  9. Java设计模式—观察者模式

    观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/subscribe). 其定义如下: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都 ...

  10. Visual Studio Code使用Open In Browser打开的是记事本

    今天在家里学习前端开发,发现Visual Studio Code使用Open In Browser插件快速打开浏览器有问题,打开的是操作系统的记事本. 后来发现电脑的html文件默打开方式被改成了记事 ...