HTTP(HyperText Transfer Protocol)协议即超文本传输协议,是用于在万维网(WWW)上传输超文本内容的基础协议。
一、HTTP 协议的特点
1、简单快速
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST 等。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
2、灵活
HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
3、无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4、无状态
HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
二、B/S(Browser/Server)结构
B/S 结构即浏览器 / 服务器结构,是随着 Internet 技术的兴起,对 C/S(Client/Server)结构的一种变化或者改进的结构。
结构组成
优势
HTML(HyperText Markup Language)超文本标记语言,它不同于一般的编程语言。超文本即超出纯 文本的范畴,例如:描述文本颜色、大小、字体等信息,或使用图片、音频、视频等非文本内容。
HTML由一个个的标签(标记)组成,这些标签各司其职,有的提供网页信息,有的负责文字,有的负责 图片,有的负责网页布局,所以一个HTML文件,是由格式标签和数据组成。
超文本需要显示,就得有软件能够呈现超文本定义的排版格式,例如显示:图片、表格,显示字体的大小、颜色,这个软件就是浏览器。
超文本的诞生是为了解决纯文本不能格式显示的问题,是为了好看,但是只有通过网络才能分享超文本的内容,所以制定了HTTP协议。
CSS 是网页设计和开发中非常重要的一部分,它为网页提供了丰富的样式和布局控制能力,使网页更加美观、易用和具有交互性
Javascript 简称JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到了几乎主流浏览器支持。
PC 端或移动端浏览器访问
从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示
从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
手机 App 访问
内置了HTML和JS文件,不需要从静态WEB服务器下载 JS 或 HTML。为的就是减少文件的发送,现代前端开发使用的JS文件太多或太大了
有必要就从图片服务器请求图片,从业务服务器请求动态数据客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
微服务的优点
微服务缺点:
常见的微服务框架
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和 并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和 JSP容器
官网: http://tomcat.apache.org/
实验环境:
node | IP |
nginx.exam.com | 172.25.250.100 |
tomcat-node1.exam.com | 172.25.250.10 |
tomcat-node2.exam.com | 172.25.250.20 |
1.node机安装java环境
[root@tomcat-node1 ~]# yum install java-1.8.0-openjdk.x86_64 -y
2.安装并启动tomcat
[root@tomcat-node1 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ [root@tomcat-node1 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat [root@tomcat-node1 ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started.
3.生成主配置文件
[root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/tomcat.conf [root@tomcat-node1 ~]# cat /usr/local/tomcat/conf/tomcat.conf JAVA_HOME=/etc/alternatives/jre_openjdk
4.生成启动文件
[root@tomcat-node1 ~]# vim /lib/systemd/system/tomcat.service [root@tomcat-node1 ~]# cat /lib/systemd/system/tomcat.service [Unit] Description=Tomcat #After=syslog.target network.target remote-fs.target nss-lookup.target After=syslog.target network.target [Service] Type=forking EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh PrivateTmp=true User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
5.建立tomcat用户 用户组 并给权限
[root@tomcat-node1 ~]# useradd -s /sbin/nologin -M tomcat [root@tomcat-node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat [root@tomcat-node1 ~]# systemctl daemon-reload [root@tomcat-node1 ~]# systemctl enable --now tomcat #启动失败报错 检查用户是否为tomcat [root@tomcat-node1 ~]# ls /usr/local/tomcat/ -ld drwxr-xr-x 9 root root 4096 Aug 21 11:44 /usr/local/tomcat/ [root@tomcat-node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/ [root@tomcat-node1 ~]# ls /usr/local/tomcat/ -ld drwxr-xr-x 9 tomcat tomcat 4096 Aug 21 11:44 /usr/local/tomcat/ [root@tomcat-node1 ~]# systemctl daemon-reload [root@tomcat-node1 ~]# systemctl restart tomcat.service
6.node2 执行同上操作
useradd -s /sbin/nologin -M tomcat
使用rsync可以更快
#node1上操作 rsync -ar /usr/local/apache-tomcat-9.0.93 root@:/usr/local/apache-tomcat-9.0.93 rsync -ar /usr/bin/tomcat root@/usr/bin/tomcat rsync -ar /lib/systemed/system/tomcat.service root@/lib/systemed/system/tomcat.service [root@tomcat-node2 ~]# systemctl restart tomcat.service [root@tomcat-node2 ~]# netstat -lntup | grep 80 tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2969/java tcp6 0 0 :::8080 :::* LISTEN 2969/java tcp6 0 0 :::80 :::* LISTEN 1780/httpd
7.访问tomcat
将用户请求全部转发至指定的同一个tomcat主机 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的 host首部
示例:
node1和node2端: [root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
nginx端: [root@nginx ~]# vim /usr/local/nginx/conf.d/tomcat.conf #cookie hash #对cookie进行hash [root@nginx conf.d]# cat tomcat.conf upstream tomcat { #ip_hash #对IP进行hash hash $cookie_JSESSIONID; server 172.25.250.10:8080; server 172.25.250.20:8080; } server { listen *:80; server_name www.exam.com; root /data/web/html; index index.html; location ~ \.jsp$ { proxy_pass http://tomcat; } }
注意:nginx子配置文件路径在主配置http模块之下
访问测试:
#安装memcached [root@tomcat-node1 ~]# yum install memcached -y #配置memcached [root@tomcat-node1 ~]# vim /etc/sysconfig/memcached [root@tomcat-node1 ~]# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 0.0.0.0,::1" #启动 [root@tomcat-node1 ~]# systemctl daemon-reload [root@tomcat-node1 ~]# systemctl enable --now memcached Created symlink /etc/systemd/system/multi-user.target.wants/memcached.service → /usr/lib/systemd/system/memcached.service. [root@tomcat-node1 ~]# netstat -antlupe | grep memcache tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 979 49079 3832/memcached tcp6 0 0 ::1:11211 :::* LISTEN 979 49080 3832/memcached [root@tomcat-node1 ~]# telnet localhost 11211 Trying ::1... Connected to localhost. Escape character is '^]'. add tomkey 0 60 4 # test get tomkey # VALUE tomkey 0 4 test END
当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备 份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于 备份了一份Session
示例:
复制所有jar文件到/usr/local/tomcat/lib/
#node1 [root@tomcat-node1 lib]# vim /usr/local/tomcat/conf/context.xml 。。。 。。。 #node2端
可以看到彼此为对端存储
当我们停止node2的服务后
访问测试
在node2被停止后继续提交信息看是否可以读取到之前的会话信息