设为首页 收藏本站
查看: 641|回复: 0

[经验分享] Http和Nginx反代至Tomcat(LNMT、LAMT)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-1-4 09:23:57 | 显示全部楼层 |阅读模式
Http和Nginx反代至Tomcat(LNMT、LAMT)
================================================================================
概述:
   本章将主要介绍Http和Nginx反代至Tomcat,具体内容如下:
  • LNMT部署并实现动静分离
  • LAMT部署的实现方式;
      ·proxy_http_module代理配置
    ·proxy_ajp_module代理配置
  • Tomcat脚本(启动、停止、重启)

================================================================================
LNMT:Linux Nginx MySQL Tomcat
★工作流程(结合方式):
  • Client (http) --> nginx (reverse proxy)(http) --> tomcat  (http connector)



实验:LNMT部署并实现动静分离

环境描述:
  • 虚拟机node1(CentOS 7系统)即作为nginx服务器,又作为Tomcat服务器,客户端发来的请求首先经由nginx处理,如果为静态内容则直接由nginx响应,如果为动态内容,则由nignx反代至后端的Tomcat服务器;

实验步骤如下:
1.在node1服务器上安装nginx,这里我使用官方下载的rpm包直接安装,如下:
1
2
3
4
[iyunv@centos7 ~]# cd nginx
[iyunv@centos7 nginx]# ls
nginx-1.10.0-1.el7.ngx.x86_64.rpm  
[iyunv@centos7 ~]# yum install -y ./nginx-1.10.0-1.el7.ngx.x86_64.rpm



2.编辑nginx的配置文件/etc/nginx/conf.d/default.conf,在虚拟主机server中定义来自客户端请求的所有内容全部反代至后端的Tomcat服务器,如下:
1
2
3
4
5
6
7
8
[iyunv@centos7 ~]# vim /etc/nginx/conf.d/default.conf
location / {
     proxy_pass http://location:8080;
}
或者:
location / {
     proxy_pass http://node1.taotao.com:8080;
}



3.保存退出后检查nginx语法,没问题后启动nginx服务,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@centos7 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[iyunv@centos7 conf.d]# nginx
[iyunv@centos7 conf.d]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      25                                                      *:514                                                                 *:*                  
LISTEN      0      128                                                     *:80                                                                  *:*                  
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:631                                                                 *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:6010                                                                *:*                  
LISTEN      0      25                                                     :::514                                                                :::*                  
LISTEN      0      1                                        ::ffff:127.0.0.1:8005                                                               :::*                  
LISTEN      0      100                                                    :::8009                                                               :::*                  
LISTEN      0      100                                                    :::8080                                                               :::*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      128                                                   ::1:631                                                                :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                   ::1:6010                                                               :::*



4.在浏览器中直接请求,可以正常访问资源,如下:
wKiom1hmc9igsYjyAAA5C9FRvjw908.jpg
wKioL1hmc92jb0miAAGxP-yr4Aw483.jpg
在自定义的Tomcat的虚拟主机的目录中/data/webapps/ROOT中添加一张静态资源图片,也可以正常访问,如下:
wKiom1hmdruQfLT9AA6UDyvjJXw428.jpg


动静分离:

如上是把整个客户端请求的内容无论动静都反代至后端的服务器,现在通过在nginx的配置文件中定义实现动静分离,即:静态资源由nginx直接响应,动态资源由Tomcat响应。nginx配置文件修改如下:

1
2
3
4
# 在server中重新定义一个location,把jsp、do结尾的反代至后端Tomcat主机
location ~* \.(jsp|do)$ {
     proxy_pass http://node1.taotao.com:8080;
}



检测nginx语法,重载nginx服务
1
2
3
4
[iyunv@centos7 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[iyunv@centos7 conf.d]# nginx -s reload



在浏览器中分别请求静态资源和动态资源,发现因为只把动态资源代理到后端Tomcat服务,所以只有动态资源有响应,静态资源提示没有发现,如下:
wKiom1hmekDCyaSZAABf-9JYkaQ946.jpg
wKioL1hmekHTa2xfAAA-dWT6Cek841.jpg
现在,我们在nginx的映射根目录下提供静态资源1.jpg,再次访问可以发现可以被正常加载到,说明是由前端nginx服务器直接响应的,如下:

1
2
3
[iyunv@centos7 ROOT]# mv 1.jpg /usr/share/nginx/html/
[iyunv@centos7 ROOT]# ls /usr/share/nginx/html/
1.jpg   error_pages  forum  index.html  messages.html



wKiom1hme06zOScsAAwgbcPOZwM262.jpg

如上,把响应的java程序部署到指定的目录即可,如果需要连接后端数据库,只需要授权一个账户即可。这就是LNMT部署的整个过程。。。


LAMT:Linux Apache(httpd) MySQL Tomcat
★httpd的代理模块:
  • proxy_module:反代模块

  • proxy_http_module:适配http协议客户端;
  • proxy_ajp_module:适配ajp协议客户端;

★工作流程(结合方式):
  • Client (http) --> httpd (proxy_http_module)(http) --> tomcat  (http connector)
  • Client (http) --> httpd (proxy_ajp_module)(ajp) --> tomcat  (ajp connector)
  • Client (http) --> httpd (mod_jk)(ajp) --> tomcat  (ajp connector)



实验:使用httpd的proxy_module(包括:proxy_http_module和proxy_ajp_module)模块结合Tomcat,反代来自客户端或者前端独立反代服务器(nginx等)的请求


第一种方式:proxy_http_module代理配置示例:
1.首先安装httpd服务器,编辑httpd的配置文件,在/etc/httpd/conf.d中定义一个虚拟主机,配置使用proxy_module和proxy_http_module模块反代,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@centos7 httpd]# vim conf.d/http_tomcat.conf
<VirtualHost *:80>
    ServerName      node1.taotao.com
    ProxyRequests   Off
    ProxyVia        On
    ProxyPreserveHost On
    <Proxy *>
       Require all granted
    </Proxy>
    ProxyPass /          # 注意,这里写Tomcat的主机或者虚拟主机是没有用的,要想访问Tomcat的虚拟主机,取决于用户在客户端浏览器中键入的主机名
    ProxyPassReverse / http://localhost:8080/
    <Location />
       Require all granted
    </Location>
</VirtualHost>



2.检测语法,启动httpd服务,在浏览器中请求,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[iyunv@centos7 conf.d]# httpd -t
Syntax OK

[iyunv@centos7 conf.d]# systemctl start httpd
[iyunv@centos7 conf.d]# ss -tnl
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
LISTEN     0      25                     *:514                                *:*                  
LISTEN     0      128                    *:22                                 *:*                  
LISTEN     0      128            127.0.0.1:631                                *:*                  
LISTEN     0      100            127.0.0.1:25                                 *:*                  
LISTEN     0      128            127.0.0.1:6010                               *:*                  
LISTEN     0      25                    :::514                               :::*                  
LISTEN     0      1       ::ffff:127.0.0.1:8005                              :::*                  
LISTEN     0      100                   :::8009                              :::*                  
LISTEN     0      128                   :::80                                :::*                  
LISTEN     0      100                   :::8080                              :::*                  
LISTEN     0      128                   :::22                                :::*                  
LISTEN     0      128                  ::1:631                               :::*                  
LISTEN     0      100                  ::1:25                                :::*                  
LISTEN     0      128                  ::1:6010                              :::*                  
LISTEN     0      128                   :::443                               :::*



wKioL1hrVAuCrRYcAAGvMoR2UZc730.jpg
第二种方式:proxy_ajp_module代理配置示例:
1.编辑httpd的配置文件,在/etc/httpd/conf.d中定义一个虚拟主机,配置使用proxy_module和proxy_http_module模块反代,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@centos7 conf.d]# cp http_tomcat.conf ajp_tomcat.conf
[iyunv@centos7 conf.d]# mv http_tomcat.conf http_tomcat.conf.bak
[iyunv@centos7 conf.d]# vim ajp_tomcat.conf
[iyunv@centos7 conf.d]# cat ajp_tomcat.conf
<VirtualHost *:80>
    ServerName      tc1.taotao.com
    ProxyRequests   Off
    ProxyVia        On
    ProxyPreserveHost On
    <Proxy *>
       Require all granted
    </Proxy>
    ProxyPass / ajp://192.168.1.112:8009/
    ProxyPassReverse / ajp://192.168.1.112:8009/
    <Location />
       Require all granted
    </Location>
</VirtualHost>



2.在浏览器中键入不同的Tomcat主机名后,后端Tomcat响应不同的虚拟主机,如下:
wKioL1hrW2eBsrgnAAA4bTW4I_w229.jpg
wKioL1hrW2jzfQpyAAForVdad9M024.jpg

注意:
  • 在使用nginx做反代时,proxy_pass 保留主机名做反代项后端Tomcat请求,所以Tomcat能够根据反代时的主机名来判定,前端反代服务器请求的是Tomcat的哪个虚拟主机;
  • 但是,在使用httpd做反代时,不能通过反代(ProxyPass)时使用的主机名来判定后端Tomcat使用什么虚拟主机来响应。所以,这里的ProxyPass和ProxyPassReverse使用主机名或者IP地址是没有任何区别的,反代到后端都为ip地址,Tomcat无法判断使用哪个虚拟主机响应,只能使用默认的虚拟主机响应。为了能够使后端Tomcat能够使用不同的虚拟主机来响应,就要打开ProxyPreserveHost,保留请求时的主机名,这时客户端在浏览器中键入的主机名将会请求反代至后端的Tomcat,然后Tomcat分别对应不同的虚拟主机来响应请求。


如上,就是部署LAMT环境的整个过程。。。
wKiom1hrh4zA-fAyAADZEzEXzf0706.jpg


Tomcat 脚本启动、停止、重启 wKiom1hrh8zwCOXUAAByAf52Nts861.jpg

1.在/etc/rc.d/init.d下编写tomcat的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[iyunv@centos7 ~]# vim /etc/rc.d/init.d/tomcat
#!/bin/bash
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128'
JAVA_HOME=/usr/java/latest
CATALINA_BASE=/usr/local/tomcat
export JAVA_HOME CATALINA_BASE

case $1 in
start)
   exec $CATALINA_BASE/bin/catalina.sh start
   ;;
stop)
   exec $CATALINA_BASE/bin/catalina.sh stop
   ;;
restart)
   $CATALINA_BASE/bin/catalina.sh stop
   sleep 2
   exec $CATALINA_BASE/bin/catalina.sh start
   ;;
*)
   echo "Usage: `basename $0` {start|stop|restart}"
   exit1
   ;;
esac



2.添加到chkconfig中,并授予执行权限

1
2
[iyunv@centos7 ~]# chkconfig --add tomcat
[iyunv@centos7 ~]# chmod +x /etc/rc.d/init.d/tomcat



3.测试,重启tomcat服务,如下:
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@centos7 ~]# service tomcat restart
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-323599-1-1.html 上篇帖子: centos6.5下装tomcat 下篇帖子: Tomcat7 catalina.out 日志分割
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表