请教nginx代理nginx tomcat 根目录作为子目录的问题

相关文章推荐:
nginx 代理 tomcat
nginx nginx;
worker_processes
worker_cpu_affinity 00 0 00000;
/data/logs/nginx_error.
/var/run//nginx.
worker_rlimit_nofile 65535;
worker_connections 65535;
阅读(90) 回复(0)
其他文章推荐
一、 概述:
用nginx服务器来做真正服务器的代理服务器,这样会保护真正服务器的,类似于cdn架构,在多个城市有反向代理服务器,而只有一个城市有真正的服务器,这样把反向代理指向真正服务器可以实现每个城市都访问快,如果有缓存功能就更好了。
apt-get purge nginx*
apt-get install nginx
/etc/init.d/nginx restart
(访问以下页面看看是否好用);好用
cd /etc/nginx/sites-available/
vim default
在&location / {...
阅读(90) 回复(0)
&p class=&p0& style=&margin-bottom:0margin-top:0text-align:&&
&a href=&/blog/downLoad/fileid/11757.html& target=&_blank&&&img src=&/image/default/fj.png& align=&middle& /&nginx做反向代理时的真实IP.pdf&/a&
&h1 style=&margin-left:21.6000text-indent:-21.6000margin-bottom:0margin-top:0&&
1.&编译&o:p&&/o:p&
&p class=&p0& style=&margin-bottom:0margin-top:0pt...
阅读(150) 回复(0)
nginx反向代理前端limit限速模块总结&br /&
关于ngx_http_limit_conn_module、ngx_http_limit_req_module 模块,echo(需要安装第三方模块 ngx_http_echo_module),map(默认安装ngx_http_map_module),geo(默认安装ngx_http_geo_module)指令请查看官方文档,这里不再赘述。&br /&
有四种情况:&br /&
一,不过CDN限速配置&br /&
二,过CDN限速配置&br /&
三,不用白名单的不过CDN...
阅读(90) 回复(0)
最近看了下nginx的缓存功能觉得已很成熟了,其proxy_cache缓存和反向代理可以放到一台服务器上。
nginx简单安装就可以,默认是加载代理功能,安装时候需要把清楚缓存的第三方插件(ngx_cache_purge)加载上
请下载最新的插件,我这个插件不是最新的,可能在清楚缓存的时候会有问题。
wget /files/ngx_cache_purge-1.2.tar.gz
tar -xcvf ngx_cache_purge-1.2.tar.gz
cd ngx_cache_purge-1.2
./configure
阅读(30) 回复(0)
nginx 1.9.0 开发版发布,该版本增加了 stream module 用于一般的 TCP 代理和负载均衡。
其他改进包括:
*) Change: obsolete aio and rtsig event methods have been removed.
*) Feature: the &zone& directive inside the &upstream& block.
*) Feature: the stream module.
*) Feature: byte ranges support in the ngx_http_memcached_module.
*) Feature: shared memory can now be used on Windows versions with
阅读(150) 回复(0)
&b&&b&&/b& &wbr&情况说明&/b&&br /&
nginx配置https,tomcat正常http接受nginx转发。&br /&
代理https后,(java代码redirect地址)应用redirect
https变成http&br /&
情况类似&br /&
http://2hei.net/mt/2010/02/request-getscheme-cannt-get-https.html&br /&
/nginx-https-400-bad-request-solution/&br /&
原因分析:&br /&
经过nginx代理后用的spring
mvc的red...
阅读(0) 回复(0)
系统环境: RHEL6 x86-64 selinux and iptables disabled
1.apache2.2.6+jdk1.6+tomcat6的安装
java环境的搭建:
[root@vm2 mnt]# ls
apache-tomcat-7.0.37.tar.gz
jdk-6u32-linux-x64.bin
[root@vm2 mnt]# chmod +x jdk-6u32-linux-x64.bin
[root@vm2 mnt]# ./jdk-6u32-linux-x64.bin
[root@vm2 mnt]# mv jdk1.6.0_32/ /usr/local/jdk
[root@vm2 mnt]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export C...
架构设计与优化
阅读(450) 回复(0)
Debian/Ubuntu下nginx的安装、反向代理和负载均衡的基本配置
来源:Linux社区
作者:neosmith
[字体:大 中 小]
Debian/Ubuntu下nginx的安装、反向代理和负载均衡的基本配置
去nginx官网下载最新稳定版,这里用的是nginx-1.6.3版。
下载完成后解压缩,进入该目录执行:
./configure
如果你的机器上没有安装PCER...
阅读(150) 回复(0)
今天在centos上安装了两个tomcat和nginx,进行配置。今天记录的只是最基本的实现测试。(不包含使用redis进行session共享)
nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。
其特点是占有内存少,并发能力强。
直接开始主题:
1,首先jdk应该是配好了我就不写了,安装nginx(我使用的rmp安装) ,安装 pcre 让nginx支持rewrite,我使用的是pcre...
阅读(120) 回复(0)
1:jmap -dump:format=b,file=heap.bin 26517
26517 就是 ps 出来的 hotel(java进程)
##通过jamp dump java进程的内存
2:context: in a nutshell, A context is a web application
推荐使用二进制tomcat版本
4:tomcat manager应用有安全方面的问题,不建议使用
5: $CATALINA-HOME/lib :jars files placed here are visible both to web application and internal tomcat code.
This is a good paace
阅读(60) 回复(0)
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题Nginx+Tomcat实现反向代理及动静分离 - 推酷
Nginx+Tomcat实现反向代理及动静分离
通常tomcat部署结构
通常tomcat前端是nginx或apache,后端都为tomcat,也就意味着无论前端是什么角色都是以代理的方式进行工作的
但是要注意的是如果基于nginx做反向代理,转发请求到tomcat的时候是基于http协议进行转发的
但注意的是tomcat的连接器有httpajp jk2 jserv
而如果基于nginx做转发的话只支持http做转发
而如果apache做代理转发的话,几乎常用协议都支持
但常用的连接类型都是ajp协议,因为ajp协议可以工作在二进制模式下,而http协议都是工作在文本模式下,所以ajp的效率要比http要高效
因此要部署一个tomcat前端web服务器很多时候可以使用apache
使用nginx反向代理用户请求至tomcat
规划如下:
服务器角色
10.0.10.62
10.0.10.61
配置Tomcat
还原配置文件并 修改配置文件
[root@node1 conf]#catalina.sh stop
[root@node1 conf]#mv server.xml server.xml.bak2 [root@node1 conf]# cp server.xml.bak server.xml&
[root@node1 conf]#vim tomcat-users.xml
& &rolerolename=&manager-gui&/&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#
定义管理组,分别是信息页面以及管理页面 & &role rolename=&admin-gui&/&
& &userusername=&tomcat& password=&tomcat&roles=&manager-gui,admin-gui&/&&&&&&& &&&&# 将用户tomcat加入至这两个组内
创建网站目录
[root@node1 conf]#mkdir /tomcat/app1
创建host主机
[root@node1 conf]#vim server.xml
& && &Host name=&&& appBase= &/tomcat/app1&
&&&&&&&&&& unpackWARs=&true&autoDeploy=&true&&& & & &
&&&&&&&& &&&& &ValveclassName=&org.apache.catalina.valves.AccessLogValve&directory=&logs&& & & &
&&&&&&&& &&&& &ValveclassName=&org.apache.catalina.valves.AccessLogValve&directory=&logs&
& && &Context path=&/&docBase=&/tomcat/app1& /&
& && & & &ValveclassName=&org.apache.catalina.valves.AccessLogValve&directory=&logs&
&&&&&&&&&&prefix=&www_access_log.& suffix=&.txt& &&&&&&&&&&& pattern=&%h %l %u %t &%r& %s %b&/&
&&&&&&/Host&
#path 相当于uri的路径
更改默认主机
& &&Engine name=&Catalina& defaultHost=&&&
& &&Connector port=&80& protocol=&HTTP/1.1&
[root@node1 conf]#catalina.sh start
部署网站程序,步骤略,访问ip后返回如下页面
访问测试无误,继续之后的配置
[root@node2nginx]# pwd /etc/nginx
编辑配置文件,将所有的请求都代理至后端tomcat
[root@node2nginx]# vim nginx.conf
& && & location / {
&&&&&&&&&&& proxy_
保存退出,并检查语法
[root@node2nginx]# /usr/local/nginx/sbin/nginx -t
nginx: theconfiguration file /etc/nginx/nginx.conf syntax is ok
nginx:configuration file /etc/nginx/nginx.conf test is successful
确保代理无误
将动态内容重定向至tomcat
再次编辑配置文件
[root@node2nginx]# vim nginx.conf
改为以下参数,凡是以jsp等动态页面的请求统统转发至10.0.10.61的80端口上
&&&&&&& location / {
&&&&&&&&&&& root /usr/shar/nginx/
&&&&&&&&&&& index index.
&&&&&&& location ~ \.(jsp|do)$ {
&&&&&&&&&& &proxy_pass http://10.0.10.61:80;
访问测试,结果如下:
因为只将jsp跳转过来但是图片找不到,这时我们需要使用nginx来响应用户的静态请求
实现动静分离
将图片复制到nginx本地目录,这里我们为了方便并且为了目录的一致性,将其源码全部拷贝至nginx节点
[root@node2nginx]# mkdir -p /web/html
[root@node1tomcat]# scp -r app1 root@node2:/web/html
编辑nginx配置文件,修改如下:
server { &&&&&&&listen&&&&&& 8080; &&&&&&& server_name& &&&& &&&& &index index. &&&&&&& #charset koi8-r; &&&&&&& #access_log&logs/host.access.log& &&&&&&& location / { &&&& && root /web/ &&&&&&&&&& index index. &&&&&&& } } &&& server { &&&&&&&listen&&&&&& 80; &&&&&&& server_name& &&&& &&&& &index index. &&&&&&& #charset koi8-r; &&&&&&& #access_log&logs/host.access.log&
&&&location/ { &&&& &&& proxy_pass http://10.0.10.61:80; &&&&&&& }
&&&& location ~*\.(html|gif|jpg|jpeg|ico|swf|htm|xml)$ { &&&& &&& proxy_pass http://10.0.10.62:80; &&&& }
&&&& location ~* \.(jsp|do)$ { &&&& &&& proxy_pass http://10.0.10.61:80; &&&& }
访问测试,一切正常,如下所示
END, 谢谢各位
本文出自 “心情依旧” 博客,转载请与作者联系!
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致6695人阅读
Tomcat前端配置一个HTTP服务器应该是大部分应用的标配了,基本思路就是所有动态请求都反向代理给后端的Tomcat,HTTP服务器来处理静态请求,包括图片、js、css、html以及xml等。这样可以让你的应用的负载能力提高很多,前端这个HTTP服务器主流用的最多的当属Apache HTTP Server和nginx。今天这篇文章主要讲解的是这种组合的方式的前提下,后端的Tomcat中的app在301跳转的时候遇到的一个问题。
先把问题说清楚,前端nginx占用81端口,因为80干了别的,暂时懒得停80的应用,暂时修改为81端口而已。然后Tomcat占用8080端口,具体配置如下(只是截取了server中的一段):
location /app1/ {
index index.jsp index.html index.html index.shtml;
proxy_pass http://localhost:8080/app1/;
proxy_set_header
proxy_set_header
$remote_addr;
proxy_set_header
X-Forwarded-For
$proxy_add_x_forwarded_for;
location ~* ^.+\.(png|jpg|jpeg|gif|ico|css|js|xml)$ {
root /home/gap/app/apache-tomcat-5.5.14/webapps;
上面的代码只是简单举例,其中处理静态内容的部分也可以用目录alias或者root的方式去处理,效果应该一样的,但是具体区别我也没深入了解,不过这不是今天的重点。在这个配置下出现的问题就是当访问http://host:81/app1/Login.do的时候,登录成功需要301跳转到用户中心页面,然后跳转的地址本应该是http://host:81/app1/userindex.do,但是结果不太尽如人意,浏览器实际出现的地址http://host/app1/userindex.do。这里面的问题就是81端口没了,跑80端口去了,自然就404了。扯了一大段,这就是今天想说的问题。
问题出现了,自然得分析原因,由于我们这个项目中需要支持ssl,使用了Struts1.2的Framework,于是采用了SecurePlugIn(想了解的可以参照)的插件来处理。那么我首先怀疑是不是这个东西在作怪,看了下配置文件这个插件的enable都直接为false。看来不是这个插件作怪了,那么在不是应用本身逻辑在作怪的话那么可能是服务器配置有问题了,这个时候就应该直接从http请求开始分析了。
首先我打开chrome,然后来分析这次request发生了什么(打开开发者工具中的Network面板),能发现的基本就是请求Login.do是没问题的,但是Login.do之后发生的301重定向是错误的,一个重要的线索就是Login.do的请求中response中的Location的值是http://host/usercenter.do,这里丢掉了端口号。这个地方的具体原因后边会提到,先说下解决思路。
解决思路可以有两个,第一个就是nginx是可以利用proxy_redirect来修改response的Location和Refresh的值,Location自然可以被重新修改为81端口的地址,第二个就是找到是谁把Location搞错了,修改这个地方别搞错Location就行了。
解决思路1:利用nginx的proxy_redirect
这个思路其实有点偏重解决问题型,就是我看到这里错了,原因不纠结,我让你好使就可以了。可能好多人都是这个思路,毕竟解决问题是首要目的。
很多人在配置nginx的时候,习惯参考官方wiki的,来做一些配置,参考这个肯定比参考baidu搜索出来的文档要靠谱很多,建议不了解每个属性的可以来参照下这个官方示例。这个配置里面proxy_redirect的属性为off,很多人应该没有问过为什么就直接根据人家来做了,之所以这样下结论是因为我看到太多国内人的集成例子中都是这样设置的了。我这里也是这样设置的,以前也倒是没想起来问下为啥,的确不太符合我的风格。反正服务器是这样配置的,现在是出来问题了,我们先来看下这个属性能做什么。
首先看官方文档的说明:
Sets a text that should be changed in the header fields “Location” and “Refresh” of a response from the proxied server. Suppose a proxied server returned the header field “Location: http://localhost:8000/two/some/uri/”.
基本意思就是修改代理服务器(也就是此时的nginx)的response的头信息里面的Location和Refresh的值,按照这个解释的话我们的问题肯定就迎刃而解了,因为现在遇到的问题就是这个能够修改的两个中的一个Location出了问题,那么下面的代码就可以解决问题
proxy_redirect
http://host http://host:81;
这样重启sudo nginx -s reload然后再访问应该就ok了。其实你google搜索nginx proxy_redirect 重定向有好多这样的例子和这个解决方式是一样的,就不细说了,如果有人想了解的可以自己参照nginx官方文档和结合例子来操作下试试就可以理解了。
解决思路2:找到问题原因,修改出错的地方解决
根据上个思路解决了问题以后,一点都没如释重负的感觉,反而各个地方都觉得很空的感觉,因为有好几个疑问没解决,其中包括为啥是80而不是81或者8080没道理?这个Location是不是应该nginx来重写,修改掉那个跳转错的地方是不是比这个思路会更好?
那就先来分析下问题的原因:既然response的Locaiton不对,那么首先想到的就是这个Location是谁构造出来的,了解HTTP协议的人应该都知道,request中的header都是client(浏览器等)构造好发送给服务器的,服务器收到请求以后构造response信息返回给client。那么这样Location这个值肯定就是nginx或者Tomcat给搞出的问题了,这个地方nginx只是一个proxy server,那么response肯定是Tomcat发给nginx的,也就是说我们应该从Tomcat下手来分析这个问题。
首先我就看了下Tomcat的官方文档,这里面对这个介绍如下:
The proxyName and proxyPort attributes can be used when Tomcat is run behind a proxy server. These attributes modify the values returned to web applications that call the request.getServerName() and request.getServerPort() methods, which are often used to
construct absolute URLs for redirects. Without configuring these attributes, the values returned would reflect the server name and port on which the connection from the proxy server was received, rather than the server name and port to whom the client directed
the original request.
意思就是proxyPort的属性就是用来我这种nginx做前端代理服务器Tomcat在后端处理动态请求的情况的。修改属性的值可以作用于应用的两个方法,主要用于绝对路径和重定向之用。如果不配置的话,可能会不对头。那么既然是这里不对头,我就先把server.xml中我这个http的connector的配置加入了proxyPort=&81&,重启Tomcat,然后把nginx上步骤的修改注释掉,重启测试。结果基本如所料,完全正常跳转了。
事情到了这个时候,其实问题基本明了了,不过我还是对这个Tomcat为啥默认解析了80端口很是疑惑。我下载了Tomcat的source来看下问题究竟,看了以后用通俗的语言来表述的话就是这样:如果默认不配置proxyPort默认为0,然后在构造response的时候判断如果proxyPort为0那么就不添加端口,不添加端口当然就默认走了80端口,源代码如下:
// FIXME: the code below doesnt belongs to here,
// this is only have sense
// in Http11, not in ajp13..
// At this point the Host header has been processed.
// Override if the proxyPort/proxyHost are set
String proxyName = connector.getProxyName();
int proxyPort = connector.getProxyPort();
if (proxyPort != 0) {
req.setServerPort(proxyPort);
if (proxyName != null) {
req.serverName().setString(proxyName);
到了这里就真相大白了,心里也没结了,一块石头终于落地了。
也就是说Tomcat在设计的时候是对这种代理服务器和Tomcat集成的情况做了考虑,80端口之所以没问题是因为port为空,浏览器会默认走80端口,如果nginx这代理服务器不是80这个端口应该需要配置proxyPort的属性的,这样就不会遇到这个问题。
那么基于这个来总结的话,两种解决方式都可以,不过修改Tomcat配置文件的方式是我最推荐的,因为这个思路看起来是又合理、又易于理解。我的感觉就是谁的事情谁来解决比较好,nginx作为proxy server 你就只需要做你的静态文件的解析,和把动态请求方向代理的服务器就可以了,既然Tomcat把这个信息构造错了,人家也有提供了解决方案,就根据你的情况合理配置就可以了。
一直以来自己是个特别较真的人,各种事情都是,希望每个人在解决问题的时候不要仅限于解决了问题就ok吧,更多的去了解问题的真相才会进步更快,例如这个问题其实有一个必要前提是需要了解一些HTTP的协议的基础知识,如果不了解的话可能你不会很快判断出Location出了问题,你可能也不会很快知道response是谁构造错的。建议大家都读下,每个做web开发的工程师都应该拥有这本书,可以大概先看一遍了解,后续需要就拿出来作为工具书查阅资料。如果作为工具书的话,那就强烈推荐大家购买图灵推出的,我都把我的纸质书卖了换了电子版了,买了都说好啊。不过顺带说句图灵购买也需要输入个兑换码才能送银子,这体验不好,因为总是忘记,着急买书的都会忘记,建议改进下啊。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:70969次
排名:千里之外
原创:24篇
转载:50篇
(1)(3)(1)(1)(4)(1)(4)(8)(7)(3)(2)(3)(3)(7)(2)(3)(9)(5)(1)(7)请教nginx代理tomcat作为子目录的问题
要评论问题请先或
要参与问题请先或
要参与问题请先或
浏览: 4000
关注: 4 人

我要回帖

更多关于 nginx tomcat 根目录 的文章

 

随机推荐