【转】Nginx反向代理转发tomcat
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的更多相关文章
- Nginx反向代理实现Tomcat负载均衡
这篇短文主要介绍Tomcat的集群和用Nginx反向代理实现Tomcat负载均衡. 1.首先需要对一些知识点进行扫盲(对自己进行扫盲,囧): 集群(Cluster) 简单来说就是用N台服务器构成一个松 ...
- Nginx反向代理实现Tomcat+Jpress和halo
一.利用Nginx反向代理Jpress+Tomcat 1.环境准备 服务器 IP地址 作用 系统版本 Proxy代理服务器 10.0.0.101 负载均衡Nginx Web服务器 Ubuntu2004 ...
- Nginx反向代理实现Tomcat多个应用80端口访问
应用背景 一般我们在开发时,一个工程里会有多个Web应用,比如一个前台一个后台,那我们就需要配置2个Tomcat服务器,比如一个是http://localhost:8080,一个是http://loc ...
- nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意:今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法 ...
- nginx反向代理转发后页面上的js css文件无法加载【原创】
故障现象:nginx做代理转发后,发现页面上的js css文件无法加载,页面样式乱了. 原因:没有配置静态资源 解决js css文件无法加载无法访问的问题 解决办法: 修改配置文件nginx.conf ...
- Nginx反向代理到Tomcat服务器
在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat ...
- 【Nginx】Nginx反向代理转发Host设置
#事故现场: 服务器A(Nginx服务器):192.168.2.126 服务器B(Web服务器):192.168.2.221 服务器A反向代理服务器B,A配置了upstream为: http { up ...
- Nginx反向代理转发Host设置
默认情况下反向代理是不会转发请求中的Host头部,如果需要转发,则需要配置红色字体表示的选项参数. location /t02 { proxy_set_header Host $host; proxy ...
- nginx反向代理转发apache配置 之 cookie去哪儿了?
在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理. 原理是这样: 方案一: 1. 将域名解析指向测试服务器的地址: 2. 开放相关端口访问 ...
随机推荐
- nodejs获取客户机ip
/** * Created by chaozhou on 2015/11/24. */ var getIp = function(req){ var ipStr = req.headers['x-fo ...
- 初进JAVA职场面试小技巧:一个老学长的吐血之作!
看着一批批小白的遭遇,有些无奈,又跟我年轻时有些类似.今天正好有点时间,给你几个建议. 1.在结业之前一定要把自己参与过的项目仔细审视一下,一点要特别熟悉项目的流程功能,另外也要重视自己做过的模块,看 ...
- Spring课程 Spring入门篇 5-6 introductions应用
1 解析 1.1 aop:declare-parents 标签简介 1.2 标签使用样式 2 代码演练 2.1 introductions标签应用 1 解析 1.1 aop:declare-paren ...
- git 批量删除 tag
1. master分支存在大量冗余tag aa0e24dfd920a85c39da400a404309cb6fc69dc0 refs/tags/rc_69 f36f3f21f1ce61db3974e9 ...
- eclipse svn使用
简单介绍一些基本操作 1.同步在Eclipse下,右击你要同步的工程->team->与资源库同步->这时会进入同步透视图,会显示出本机与SVN上内容有不同的文件,双击文件名,会显示出 ...
- Bootstrap + AngularJS+ Ashx + SQL Server/MySQL
去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQ ...
- 修改 Linux VM 中单个用户最大进程数的限制
在部署有并发任务执行的虚机上, 会遇到 SSH 无法访问的问题. 本文将帮助你找出其中一种比较特殊的原因, 并提供解决方案. Note 以下案例分析基于 CentOS 7, 对于其他版本的 Linux ...
- sqlserver数据库使用空间监控
数据库使用空间监控,并且每周发邮件预警,下面是操作步骤: 1:建立一张表 ), database_name ), file_group ), logical_name ), physical_name ...
- 【NLP_Stanford课堂】语言模型4
平滑方法: 1. Add-1 smoothing 2. Add-k smoothing 设m=1/V,则有 从而每一项可以跟词汇表的大小相关 3. Unigram prior smoothing 将上 ...
- c#编程指南(六) 类索引器(Class Indexer)
类索引器,可以使得你使用数组一样的方式来访问类的数据. 这种访问多见于数组,列表,词典,哈希表的快捷访问. 实际上写法很简单,写成:public T1 this[T2 i] 代码如下: using S ...