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. easyui+nodejs+sqlserver增删改查实现

    用到的模块或者技术: Express: http://www.expressjs.com.cn/4x/api.html#express Easyui: http://www.jeasyui.com/d ...

  2. 2017年11月30日 C#TreeNode递归&邮箱验证&新用户窗体

    TreeNode递归 递归:自己调用自己一层一层的把数据找出来 TreeNode:可以创建多个节点 private void button1_Click(object sender, EventArg ...

  3. mycat安装

    一.简介 在互联网数据大爆炸时代,对数据处理的要求越来越高,很明显单实例数据库已经不能满足需求了,这时候数据库的中间件便应运而生.中间件聚集多实例来提供更强的处理能力,并且隐藏了多实例产生的复杂性.m ...

  4. <td>标签scope属性

    HTML <td> 标签的 scope 属性 HTML <td> 标签 实例 下面的例子把两个 th 元素标识为列的表头,把两个 td 元素标识为行的表头: <table ...

  5. 获取指定包名下继承或者实现某接口的所有类(扫描文件目录和所有jar)

    import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLCo ...

  6. python2文件转换为exe可执行文件

    windows下py文件的运行需要安装python,如果是exe文件就可以直接运行 1. 直接在命令行用pip安装 pyinstaller pip install pyinstaller 2 在命令行 ...

  7. 第2章 css边框属性

    圆角效果 border-radius border-radius是向元素添加圆角边框. 使用方法: border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border- ...

  8. 警告: The web application [ROOT] appears to have started a thread named [Thread-48] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:

    1. 问题描述 tomcat跑web项目(其中依赖java项目) 出现大量上述警告 项目起不来 关键字 memory leak 内存泄漏 2. 解决方案 难道是程序写的有问题? 最终 将tomcat ...

  9. linux 的 磁盘管理

    1. 查看信息 1.1 查看磁盘信息 在linux中如果需要查看磁盘信息,需要使用df和du命令. df: 列出文件系统中整个磁盘的使用量 du:评估文件系统中磁盘的使用量,经常用来推算目录所占的容量 ...

  10. 139.00.003 Git学习-Git时光机之Inbox体系(三)

    一.Git时光机之Inbox 体系 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有G ...