[Nginx系列十|Tomcat]Nginx基础架构LNMT

背景

         前面一章我们介绍了Nginx的基础架构LNMP,今天我们将说说另外一款基础架构LNMT。说基础架构的主要原因是想通过一套整体的方案来回顾和巩固的Nginx的一些基础功能,比如location,server,upstream等等。

         在说LNMT架构之前我们要先简单介绍下T(Tomcat)的功能和作用吧。

Tomcat

 1.     Tomcat介绍

   1.1     简介 

         Tomcat 是 Apache 的扩展,是 Apache 的一个子项目,它具备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式返回客户端。
  Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

  1.2      Tomcat与Nginx的区别

         Nginx仅支持静态资源解析,而tomcat支持解析JAVA开发的web应用,还支持解析静态资源(效率不高)

        Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。通常情况下,企业会用Nginx+Tomcat结合,由Nginx处理静态资源,Tomcat处理动态资源。

  1.3     Tomcat核心组件

         1)Web 容器:完成 Web 服务器的功能( 如 HTTP/HTTPS 请求的接受和响应 );

        2) Servlet 容器:由名称为 catalina 的脚本来处理 Servlet 代码( 如从数据库中拿取数据给与前端 );

        3)  JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码( index.html index.php index.jsp )。

因此Tomcat是web应用服务器,也是一个Servlet/JSP容器。Tomcat作为 Servlet容器,负责处理客户请求,把请求传送给servlet,并将servlet的响应传送回给客户。

  1.4     Tomcat访问流程 

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第1张图片

 1) 用户点击网页内容,请求被发送到本机端口 8080,Service 作为一个进程支持 Tomcat,Connector 作为一个连接器(连接 nginx 或者外部请求),等着去监听 HTTP1.1 版本中的 8080 端口(Coyote:可以看做运行 Connector 连接器运行的环境);
2)交给后端 container 容器中的 Engine(支持容器正常运行的引擎);
3)在引擎所支持的 container 容器内会有一个项目 host,进行交互,借助于 context 做连接的服务,连接的是 java 的前端和后端;
4)交给 servlet 处理 java 后端数据与数据库交互;
5)servlet 处理完会返回给 context(连接器);
6)context 返回给 engine 引擎;
7)engine 引擎返回给端口,最终通过映射端口的方式将页面展现给客户

2.    Tomcat安装

 2.1    快速安装

 1.   Tomcat官网下载软件包:Tomcat官网

 2.   解压软件包到指定目录

root@web1:/solft# tar   -xvf  apache-tomcat-9.0.65.tar.gz  -C  /tomcat
root@web1:/solft#

 3.   执行启动脚本

root@web1:/solft/tomcat/bin# ./startup.sh 
Using CATALINA_BASE:   /solft/tomcat
Using CATALINA_HOME:   /solft/tomcat
Using CATALINA_TMPDIR: /solft/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /solft/tomcat/bin/bootstrap.jar:/solft/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.


##  查看是否启动成功
root@web1:/solft/tomcat/bin# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::8080                 :::*                    LISTEN      50954/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      50954/java          

2.2    Tomcat配置文件

         Tomcat的主要配置文件是/usr/share/tomcat9/etc/server.xml。

默认的server.xml配置如下:

        配置文件的层级关系就是我们上面所说的Connector-->container-->Engine-->Host;但是这里没有我们所说的contest和servlet,这就是我们后续虚拟主机所要配置的。

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第2张图片

 配置文件图解:

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第3张图片

 1)一个server表示一个Tomcat实例(可以有多个实例);

2)  一个server中包含多个Connector连接器,Connector的主要功能是接受和响应用户请求;

3)  service的作用就是将Connector关联至Engine引擎;

4)  一个Host就是一个站点,类似于Nginx中的多站点;

5)  Context类似于Nginx中的Location。

3.    Tomcat配置虚拟主机

3.1    tomcat默认访问界面

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第4张图片

 3.2    添加虚拟主机

         编辑conf/server.xml文件

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第5张图片

 访问

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第6张图片

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第7张图片

 LNMT架构

 1.   单节点TOMCAT

 1.1   配置Nginx的代理

server {
    listen 80;
    server_name zrlog.tomcat.com www.zrlog.tomct.com;
    access_log  /var/log/nginx/zrlog.access.log  main;

    location /  {
	return 301 http://192.168.65.130:8080;

    }
}

1. 2.   修改tomcat的虚拟主机

         由于我们在tomcat端的8080端口上存在多个虚拟主机,当我们直接return 301 http://192.168.65.130:8080的时候,访问可能会随机转发到一个虚拟主机上,此时简单的方法就是只剩一个zrlog的虚拟主机。

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第8张图片

 1.3   zrlog.tomcat.com访问

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第9张图片

 2.    配置多节点TOMCAT

 2.1    复制tomcat节点

##  压缩130上的zrlog数据
root@web1:# tar -czf zrlog.tar.gz zrlog/


##  拷贝至131
root@web1:# scp zrlog.tar.gz [email protected]:/zrlog

##  按照上述步骤安装tomcat

2.2    配置负载均衡

upstream tomcat_server {
    server 192.168.65.130:8080;
    server 192.168.65.131:8080;
}

server {
    listen 80;
    server_name zrlog.tomcat.com www.zrlog.tomcat.com;
    access_log  /var/log/nginx/zrlog.access.log  main;

    location / {
        proxy_pass http://tomcat_server;
        include proxy_params;                ###一定要配置
    }
}

 注意:include proxy_params一直要配置默认相关设置,在这个LNMT的磨课项目中不配置的话可能存在400的错误,经过排查可能是header超限超限制导致的,配置之后已解决。

root@nginx:/etc/nginx/conf.d# cat ../proxy_params
proxy_http_version 1.1;		# 设置代理的HTTP协议版本
proxy_set_header Host $http_host;	# 代理向后端主机请求时携带host域名
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;	# 获取客户端真实IP以及全链路IP
 
proxy_connect_timeout 30;	# 代理连接后端超时时间
proxy_send_timeout 60;		# 后端传递数据至代理的超时时间
proxy_read_timeout 60;		# 后端响应代理的超时时间
 
proxy_buffering on;			# 代理会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传
proxy_buffer_size 32k;		# 代理保存用户头信息的缓冲区大小
proxy_buffers 4 128k;		# 设置代理的缓冲区大小

2.3  访问

[Nginx系列十|Tomcat]Nginx基础架构LNMT_第10张图片

         通过两个整体的方案我们应该对企业的web有了一定的基础了解。思考一个问题,上述的架构中我们都是通过Nginx做的负载均衡,要是Nginx负载均衡出现故障了我们怎么办呢?或者说我们如何保证Nginx负载均衡的高可用呢?思考一下,后续我们来处理这个问题。

你可能感兴趣的:(nginx系列,java,nginx,linux,运维,tomcat)