【转】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. 开放相关端口访问 ...
随机推荐
- .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
dump文件相信有些朋友已经很熟悉了,dump文件的作用在于保存进程运行时的堆栈信息,方便日后排查软件故障,提升软件质量.关于dump分析工具windbg.adplus的文章更多了,如果您还不知道怎么 ...
- springboot mybatis 使用多数据源
SpringBoot系列博客目录,含1.5.X版本和2.X版本 springboot2.0正式版发布之后,很多的组件集成需要变更了,这次将多数据源的使用踩的坑给大家填一填.当前多数据源的主要为主从库, ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
- Effective C++ .37 virtual函数中默认参数的表现
#include <iostream> #include <cstdlib> using namespace std; class Pen { public: ) { cout ...
- 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较
样本:1MB的JSON文件,引入后生成500份的一个数组: 结果如下: 拷贝性能: JSON.parse(JSON.stringify()) 的方法:2523.55517578125ms immuta ...
- cf1043D. Mysterious Crime(枚举)
题意 题目链接 给出\(m\)个长度为\(n\)的排列,问有多少连续公共子串 \(m \leqslant 10, n \leqslant 10^5\) Sol 非常naive的一道题然而交了3遍才过( ...
- Python基础-I/O模型
一.I/O模型 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接 ...
- Python基础-月考
1. 8<<2等于? # 解释:将8按位左移2位 # 8 0 0 0 0 1 0 0 0 # 32 0 0 1 0 0 0 0 0 2. 通过内置函数计算5除以2的余数 print(div ...
- ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579或ORA-20006错误
ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579或ORA-20006错误 1.测试环境说明 ArcSDE版本:10.2.2 Oracle版本:12.1.0.1和11. ...
- 边缘检测matlab算法汇总
边缘检测matlab算法汇总 1. 基于一阶微分算子检测边缘图像 一阶微分边缘算子又称梯度边缘算子,它是利用图像在边缘处的阶跃性,及图像梯度在边缘去得极大值得特征性进行边缘检测. Sobel ...