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包,运行项目。

nginx反代网站_html


① http://localhost:8080/automobikesys/index.do (http://192.168.1.155:8080/automobikesys/index.do)

nginx反代网站_html_02


② http://192.168.1.155:8080/automobikesys2/index.do

nginx反代网站_tomcat_03


③ http://192.168.1.155:8080/testauto/index.do

nginx反代网站_linux_04

========

2、tomcat配置域名后,域名访问正常,ip访问404

(如果最初是localhost的话,IP和域名都能正常访问)

如果在某个中单独配置域名或IP,那感觉他变成了“精准”匹配访问。

具体参考之前写的文章:

nginx反代网站_nginx反代网站_05

3.1、nginx反代tomcat,所对应的路径问题。

https://www.jianshu.com/p/b010c9302cd0 《nginx 之 proxy_pass详解》

《Nginx反向代理相关事宜》

nginx反代网站_html_06

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界面

nginx反代网站_linux_07

②、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

nginx反代网站_tomcat_08

而不是我自己自定义的根目录下的 /data/tomcatweb/index.html

nginx反代网站_html_09

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反代的“相对路径和绝对路径”了 。未解决。

此时的配置是: 不是想要的效果:

nginx反代网站_nginx反代网站_10


nginx反代网站_nginx反代网站_11


群里老哥给的建议:

建议location跟tomcat的项目路径一致   否则出现跳转的时候 又对不上  麻烦死 。   绝对相对,也是多一个rewrite的问题,最终你tomcat 的路径要匹配

proxy_pass:  后面不加 "/" , location的地址跟着跑
proxy_pass:  后面加 "/" , location的地址不跟着跑

经过多次尝试,发现的规律是: 他反代到8080端口后,他默认找的路径是。 /usr/local/tomcat/webapps 下面的文件。

nginx反代网站_linux_12

上图的① 
当url为 http://www.oldhei.com/edu/a.html 。location 匹配 /edu/ ,则反代去8080 ,访问webapss下面的 /edu/文件夹的 a.html

nginx反代网站_html_13


nginx反代网站_tomcat_14

nginx反代网站_nginx反代网站_15

图中② ,则同理,http://www.oldhei.com/vod/a.html . 找到的是 8081 的webapps下面的 vod文件夹下的 a.html

nginx反代网站_nginx_16


nginx反代网站_tomcat_17

图中③ ,则同理,http://www.oldhei.com/data/tomcatweb/. 找到的是 8080的webapps下面的 /data/tomcat文件夹下的 index.html

nginx反代网站_linux_18


nginx反代网站_linux_19

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

nginx反代网站_nginx反代网站_20

版本2

nginx反代网站_linux_21


暂时没研究出来,暂时不玩这个另类的蛇了。 还是按规定,在webapps下部署项目,之后反代即可。

如果有rewrite的方法,也希望大神指导指导

分割线

版本3

此时看样子是符合预期的要求了。都访问到

nginx反代网站_tomcat_22


nginx反代网站_linux_23


根据前两个版本,观察后,我将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反代网站_linux_24


nginx.conf改为

nginx反代网站_nginx反代网站_25


也能达到版本3的效果。

nginx反代网站_nginx_26

小结:

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;
}