1、tomcat运行多个javaweb项目。
环境:win7 , jdk1.8 ,apache-tomcat-7.0.93。
tomcat下的server.xml保持默认配置,不做任何更改。里面的端口的解释8005 shutdown ,8080 webPort,8009 AJP
即在webapps放对应的war包,运行startup.bat启动tomcat后,会自动解压war包,运行项目。
① http://localhost:8080/automobikesys/index.do (http://192.168.1.155:8080/automobikesys/index.do)
② http://192.168.1.155:8080/automobikesys2/index.do
③ http://192.168.1.155:8080/testauto/index.do
========
2、tomcat配置域名后,域名访问正常,ip访问404
(如果最初是localhost的话,IP和域名都能正常访问)
如果在某个中单独配置域名或IP,那感觉他变成了“精准”匹配访问。
具体参考之前写的文章:
3.1、nginx反代tomcat,所对应的路径问题。
https://www.jianshu.com/p/b010c9302cd0 《nginx 之 proxy_pass详解》
《Nginx反向代理相关事宜》
tomcat的 server.xml
<!--原默认Host-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
<!--自定义的Host,虚拟目录 www.oldhei.com 绝对路径/data/tomcatweb -->
<Host name="www.oldhei.com" appBase="/data/tomcatweb"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/" debug="0" reloadable="true" crossContext="true"/>
</Host>
nginx.conf
server {
listen 80;
server_name www.oldhei.com;
location / {
proxy_pass http:127.0.0.1:8080;
root html;
index index.html index.htm;
}
这里由于是 location / , 所以反代访问/usr/local/tomcat/webapps/ (相对路径)
①、proxy_pass http://127.0.0.1:8080;
上面对应的是 /usr/local/tomcat/webapps/ 下面的默认tomcat界面
②、proxy_pass http://127.0.0.1:8080/data/tomcatweb/;
(这里当时误解操作,出现迷之404)
由①得知他这里默认走 /webapps/下面的默认tomcat网页。
当我改成了 proxy_pass http:127.0.0.1:8080/data/tomcatweb/;
按理来说,那就是 /usr/local/tomcat/webapps/data/tomcatweb/index.html
而不是我自己自定义的根目录下的 /data/tomcatweb/index.html
3.2、nginx反代tomcat。 反代的路径是非webapps的,绝对路径即自定义路径.
参考: https://www.jianshu.com/p/ec14f55fd209 (nginx反向代理proxy_pass绝对路径和相对路径)
自定义的Host路径。
(经过之前的论证:nginx反代tomcat。他默认情况下反代的是 tomcat webapps下默认的文件项目。
那我想反代 非webapps的文件路径(例如绝对路径 /data/tomcatweb/),那要咋整?)
/data/tomcatweb/这里就涉及到nginx反代的“相对路径和绝对路径”了 。未解决。
此时的配置是: 不是想要的效果:
群里老哥给的建议:
建议location跟tomcat的项目路径一致 否则出现跳转的时候 又对不上 麻烦死 。 绝对相对,也是多一个rewrite的问题,最终你tomcat 的路径要匹配
proxy_pass: 后面不加 "/" , location的地址跟着跑
proxy_pass: 后面加 "/" , location的地址不跟着跑
经过多次尝试,发现的规律是: 他反代到8080端口后,他默认找的路径是。 /usr/local/tomcat/webapps 下面的文件。
上图的①
当url为 http://www.oldhei.com/edu/a.html 。location 匹配 /edu/ ,则反代去8080 ,访问webapss下面的 /edu/文件夹的 a.html
图中② ,则同理,http://www.oldhei.com/vod/a.html . 找到的是 8081 的webapps下面的 vod文件夹下的 a.html
图中③ ,则同理,http://www.oldhei.com/data/tomcatweb/. 找到的是 8080的webapps下面的 /data/tomcat文件夹下的 index.html
http://www.oldhei.com/data/tomcatweb/ (域名80访问,走反代了)
this is /usr/local/tomcat/webapps/data/tomcatweb/ 's index.html 123456
http://192.168.26.134:8080/data/tomcatweb/ (IP+8080访问)
this is /usr/local/tomcat/webapps/data/tomcatweb/ 's index.html 123456
http://192.168.26.134/data/tomcatweb/
this is /usr/local/tomcat/webapps/data/tomcatweb/ 's index.html 123456
http://www.oldhei.com:8080/data/tomcatweb/ (域名+8080 ,此时访问的是我自定义的Host)
index.html 111111
版本1
版本2
暂时没研究出来,暂时不玩这个另类的蛇了。 还是按规定,在webapps下部署项目,之后反代即可。
如果有rewrite的方法,也希望大神指导指导
分割线
版本3
此时看样子是符合预期的要求了。都访问到
根据前两个版本,观察后,我将server.xml 的 的值做了对调,就到达了上述的效果。 (虚拟目录改成localhost),
他nginx反代 , 127.0.0.1 —> 会跑去 的 虚拟目录 (这样说可能不够严谨)
location /data/tomcatweb/ {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
版本4
那根据版本3的理解。此时
server.xml 改为
nginx.conf改为
也能达到版本3的效果。
小结:
1、当tomcat部署在webapps下,nginx的 proxy_pass http://127.0.0.1:8080; 他是会跳到 默认对应的
/usr/local/tomcat/webapps下面,找到对应的文件夹项目。
2、当tomcat部署在webapps下,nginx的 proxy_pass http://127.0.0.1:8081; 他是会跳到 默认对应的
/usr/local/tomcat8081/webapps下面,找到对应的文件夹项目。
他是看 IP+端口的来找你tomcat对应的文件的。
3、当web项目部署tomcat,自定义的路径时,如
<Host name="www.oldhei.com" appBase="/data/tomcatweb"
这时候使用nginx反代那就要注意了。跳转的地方是有所区别的。所以有两种改法,要一 一对应的。同时也要注意server.xml中<Host name值是要求唯一的,否则报错。
#方法1
<Host name="localhost" appBase="/data/tomcatweb"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/" debug="0" reloadable="true" crossContext="true"/>
</Host>
nginx.conf:
location /data/tomcatweb/ {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
#方法2
server.xml :
<Host name="www.oldhei.com" appBase="/data/tomcatweb"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/" debug="0" reloadable="true" crossContext="true"/>
</Host>
nginx.conf:
location /data/tomcatweb/ {
proxy_pass http://www.oldhei.com:8080;
index index.html index.htm;
}