Haproxy搭建Web群集

Haproxy搭建Web群集

  • 1.Haproxy相关概念
    • 1.1 Haproxy的概述
    • 1.2 Haproxy的主要特性
    • 1.3 常见的Web集群调度器
  • 2.常见的应用分析
    • 2.1 LVS 应用
    • 2.2 Haproxy 应用
    • 2.3 LVS、Nginx、Haproxy的区别
    • 2.4 Haproxy调度算法原理
  • 3. Haproxy命令行详解
    • 3.1 HAProxy服务的5个域
    • 3.2 Haproxy服务器配置
    • 3.3 定义监控页面
    • 3.4 日志定义
    • 3.5 会话保持
    • 3.6 内核优化
  • 4.实战演练:Haproxy搭建web群集
    • 4.1 Haproxy服务(CentOS 7-6)
    • 4.2 配置监控页面功能
    • 4.3 配置日志文件地址
    • 4.4 Apache+Tomcat服务(CentOS 7-7)
    • 4.5 Apache+Tomcat服务(CentOS 7-8)

1.Haproxy相关概念

1.1 Haproxy的概述

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)WEB站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护WEB服务器不被暴露到网络上

1.2 Haproxy的主要特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个最大处理能力可达10Git/s
  • 支持多达8种负载均衡算法;
  • 支持Session会话保持,Cookie的引导
  • 支持通过获取指定的url来检测后端服务器的状态
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制
  • 支持TCP和HTTP协议的负载均衡转发
  • 支持客户端的keepalive功能减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成.

1.3 常见的Web集群调度器

在这里插入图片描述

2.常见的应用分析

2.1 LVS 应用

  • LVS在企业应用中抗负载能力很强,但存在不足
  • LVS不支持正则处理,不能实现动静分离
  • 对于大型网站,LVS的实施配置复杂,维护成本相对较高

2.2 Haproxy 应用

  • Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件
  • 适用于负载大的web站点
  • 运行在硬件上可支持数以万计的并发连接的连接请求

2.3 LVS、Nginx、Haproxy的区别

软件的负载均衡性能

Haproxy功能强大,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度。在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡。

支持的代理类型

LVS基于Linux操作系统内核实现软负载均衡,只能支持4层代理的IP转发(不支持正则表达式)
Haproxy和Nginx是基于第三方应用(应用程序)实现的软负载均衡,都支持4层和7层转发(支持正则表达式)

支持的健康检查方式

LVS因为工作在ISO模型的第四层,其状态监测功能单一,支持对端口和URL进行检查
而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式
Nginx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测

总结:

  • 负载均衡性能:硬件负载F5 > LVS 最好 > Haproxy 其次 > Nginx 弱于其它两种.
  • 支持的代理类型:LVS基于系统内核实现的负载均衡只能支持4层代理的IP转发(不支持正则),Haproxy和Nginx基于应用程序实现的负载均衡,都能支持4层和7层代理转发(支持正则).
  • 支持的健康检查方式:LVS支持对端口和URL进行检查,Nginx只支持对端口的检查,Haproxy支持端口、URL、脚本等多种检查方式.

2.4 Haproxy调度算法原理

Haproxy支持多种调度算法,最常用的有八种,分别是roundrobinstatic-rrleastconnsourceuriurl_paramhdr(name)、rdp-cookie(name)。

名词功能作用解释
roundrobin表示简单的轮询
static-rr表示根据权重
leastconn表示最少连接者先处理
source表示根据请求源IP
uri表示根据请求的URI,做cdn需使用
url_param表示根据请求的URl参数’balance url_param requires an URL parameter name
hdr(name)表示根据HTTP请求头来锁定每一次HTTP请求
rdp-cookie(name)表示根据cookie(name)来锁定并哈希每一次TCP请求

roundrobin

roundrobin算法是最简单最常用的一种算法,即轮询调度

static-rr

静态轮询,基于权重轮询调度,不支持Haproxy在运行时进行权重调整和后端服务器的慢启动,后端的主机数量没有限制。
  
leastconn

LC(Least Connections)最小连接数算法根据后端的节点连接数大小动态分配前端请求

source

基于来源访问调度算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

uri

目的地址哈希,表示根据用户请求的URI做hash,做cdn时需要使用。(cdn:内容分发网络 ,边缘网络缓存加速),url_hash就是根据虚拟主机名称后面的目录

url_param

表示根据请求的URl参数’balance url_ param’ requires an URL parameter name。

hdr(name)
表示根据HTTP请求头来锁定每一次HTTP请求

rdp-cookie(name)
表示根据cookie (name)来锁定,并哈希每一次TCP请求

3. Haproxy命令行详解

3.1 HAProxy服务的5个域

  • global:用于配置全局参数
  • default:用于配置所有frontend域和backend域的默认属性
  • frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
  • backend:用于配置后端服务(即HAProxy后面接的服务)实例组
  • listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下

3.2 Haproxy服务器配置

#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
global
    
    log         127.0.0.1 local0 info			#将info(及以上)的日志发送到rsyslog的local0接口
    log         127.0.0.1 local1 warning		#将warning(及以上)的日志发送到rsyslog的local1接口

    #chroot      /var/lib/haproxy				#修改haproxy工作目录至指定目录,一般需将此行注释掉
    pidfile     /var/run/haproxy.pid			#指定保存HAProxy进程号的文件
    maxconn     40000							#最大连接数,HAProxy 要求系统的 ulimit -n 参数大于 maxconn*2+18
    user 		haproxy            				#以指定的用户名身份运行haproxy进程
    group 		haproxy           				#以指定的组名运行haproxy,以免因权限问题带来风险
    daemon										#让haproxy以守护进程的方式工作于后台
    spread-checks 2								#在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。
    #nbproc 2 									#指定启动的haproxy进程个数,只能用于守护进程模式的haproxy,默认只启动一个进程。

log设置全局日志配置,语法为log <address> ,上例中指定使用本机上的syslog服务中的local0日志设备,记录日志等级为info的日志=。指定使用本机上的syslog服务中的local1日志设备,记录日志等级为warning的日志chroot设置HAProxy工作目录pidfile设置HAProxy的pid文件位置maxconn设置每个HAProxy进程可用的最大连接数user及group设置HAProxy进程所属的用户及用户组daemon关键字表示以守护进程方式运行haproxy.

#配置默认参数,这些参数可以被用到listen,frontend,backend组件 
defaults
    mode                    http				#模式为http(7层代理http,4层代理tcp)
    log                     global				#所有前端都默认使用global中的日志配置
    option                  httplog				#开启httplog,在日志中记录http请求、session信息等。http模式时开启httplog,tcp模式时开启tcplog
    option                  dontlognull			#不在日志中记录空连接
    option http-keep-alive						#使用keepAlive连接,后端为静态建议使用http-keep-alive,后端为动态应用程序建议使用http-server-close
    option forwardfor       except 127.0.0.0/8	#记录客户端IP在X-Forwarded-For头域中,haproxy将在发往后端的请求中加上"X-Forwarded-For"首部字段
    option                  redispatch			#当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时,将其转发到别的后端上
    retries                 3					#定义连接后端服务器的失败重连次数,连接失败次数超过此值后会将对应后端服务器标记为不可用
    timeout http-request    10s					#默认http请求超时时间,此为等待客户端发送完整请求的最大时长,用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发
    timeout queue           1m					#默认客户端请求在队列中的最大时长
    timeout connect         10s					#默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容
    timeout client          1m					#默认和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接,新版本中替代clitimeout
    timeout server          1m					#默认和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是高并发时,新版本中替代srvtimeout	
    timeout http-keep-alive 10s					#默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout client
    timeout check           10s					#和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间,只是读取到检查结果的时长)
    maxconn                 30000				#最大连接数,“defaults”中的值不能超过“global”段中的定义

老版本的haproxy中是以下几项:

  • contimeout 5000 :设置连接超时时间,默认单位是毫秒。
  • clitimeout 50000 :设置客户端超时时间,默认单位是毫秒。
  • srvtimeout 50000:设置服务器超时时间,默认单位是毫秒。
frontend  http-in
	###监听任意地址的80端口号
    bind *:80
    ###通过acl过滤符合条件的静态页面请求
    acl url_static       path_beg       -i  /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
	###将符合acl条件的静态页面情景求转发到static——backend后端域,将其他所有请求转发到dynamic_backend后端与中
    use_backend static_backend            if url_static
    default_backend             dynamic_backend
#定义后端域static_backend
backend static_backend
    balance     roundrobin						#使用轮询算法
    option httpchk GET /test.html				#表示基于http协议来做健康状况检查,只有返回状态码为2xx或3xx的才认为是健康的,其余所有状态码都认为不健康。不设置该选项时,默认采用tcp做健康检查,只要能建立tcp就表示健康。
    server      inst1 192.168.80.70:80 check inter 2000 rise 2 fall 3
    server      inst2 192.168.80.80:80 check inter 2000 rise 2 fall 3
    #同上,inter 2000 rise 2 fall 3是默认值,可以省略
#定义后端域dynamic_backend
backend dynamic_backend
    balance     roundrobin
    option http-server-close
    cookie HA_STICKY_dy insert indirect nocache
    server app1 192.168.80.70:8080 cookie appser1 check
    server app2 192.168.80.80:8080 cookie appser2 check

3.3 定义监控页面

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
listen stats
    bind *:1080                   #绑定端口1080
    stats enable                  #启用统计报告监控
    stats refresh 30s             #每30秒更新监控数据
    stats uri /stats              #访问监控页面的uri
    stats realm HAProxy\ Stats    #监控页面的认证提示
    stats auth admin:admin        #监控页面的用户名和密码
[root@localhost haproxy]# systemctl restart haproxy.service 
[root@localhost haproxy]# systemctl status haproxy.service
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2023-06-12 16:56:16 CST; 11s ago
 Main PID: 68625 (haproxy-systemd)
    Tasks: 3
   CGroup: /system.slice/haproxy.service
           ├─68625 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run...
           ├─68626 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds...
           └─68627 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds...

6月 12 16:56:16 localhost.localdomain systemd[1]: Started HAProxy Load Balancer.
6月 12 16:56:16 localhost.localdomain haproxy-systemd-wrapper[68625]: haproxy-systemd-w...

浏览器访问 http://192.168.80.60:1080/stats

3.4 日志定义

haproxy的日志默认是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中

方法一

#修改haproxy.cfg,将info及以上级别的日志发送到rsyslog的local0接口,将warning及以上级别的日志发送到rsyslog的local1接口
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
global
    ......
    log 127.0.0.1 local0 info
    log 127.0.0.1 local1 warning
    ......

defaults
    ......
    log global
    ......

注意: 信息级日志会打印HAProxy的每一条请求处理,会占用大量的磁盘空间,在生产环境中,将日志级别调整为notice

[root@localhost ~]# mkdir /var/log/haproxy
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644									#日志文件的权限
$FileOwner haproxy										#日志文件的owner
local0.*     /var/log/haproxy/haproxy_info.log			#local0接口对应的日志输出文件
local1.*     /var/log/haproxy/haproxy_warning.log		#local1接口对应的日志输出文件

#修改 rsyslog 的启动参数
[root@localhost ~]# vim /etc/sysconfig/rsyslog 
SYSLOGD_OPTIONS="-c 2 -r -m 0"

#重启 rsyslog 和 HAProxy
[root@localhost ~]# systemctl restart haproxy.service 
[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# cd /var/log/haproxy/
[root@localhost haproxy]# ls
haproxy_info.log

方法二

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
global
	log /dev/log local0 info
	log /dev/log local0 notice
    ......

defaults
    ......
    log global
    ......

#需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~

#说明:这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

[root@localhost ~]# service rsyslog restart
[root@localhost ~]# service haproxy restart

[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log		#查看haproxy的访问请求日志信息

3.5 会话保持

HAProxy在会话保持功能上可以分为四层会话保持和七层会话保持。四层会话保持是基于源地址的会话保持,是指HAProxy在负载均衡时根据访问请求的源地址作为判断关联会话的依据,对于同一IP地址的所有访问请求在作负载均衡时均会被保持到后端的同一台服务器上七层会话保持是基于cookie的会话保持,当客户端HTTP请求进入HAProxy时,根据负载均衡策略选择后端的一台服务器,后端服务器将HTTP响应返回HAProxy,此时HAproxy会插入该服务器的cookie并将插入cookie的HTTP响应返回至客户端。当该客户端再次发出请求时,带有上次插入cookie的HTTP请求进入HAProxy,HAProxy解析出cookie中服务器信息并将请求发送至相同的后端服务器

  • 四层会话保持的配置方式实际只需要将配置文件中后端代理段的负载均衡策略设置为基于源地址哈希并将工作模式设置为tcp即可
backend  nginx4
mode   tcp
balance  source
  	server  app1 192.168.8070:80 check cookie app1
    server  app2 192.168.80.80:80 check cookie app2
  • 七层会话保持配置方式则需要在配置文件后端代理段中设置cookie并确保工作模式为http
backend  nginx7
  mode   http
  balance  roundrobin
  cookie  WEBSRV insert indirect nocache
  server  app2 192.168.80.70:80 check cookie app1
  server  app1  192.168.80.80:80 check cookie app2

3.6 内核优化

vim /etc/sysctl.conf

#开启重用。允许将TIME-WAITsockets重用于新的TCP连接,默认0,表示关闭;
net.ipv4.tcp_tw_reuse = 1

#用于向外连接的端口范围。缺省情况下很小
net.ipv4.ip_local_port_range = 1024 65535

#SYN队列长度,记录尚未收到客户端确认信息的连接请求的最大值。默认为1024,加大队列长度可容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 10240

#表示系统同时保持TIME_WAIT最大数量,如果超过,TIME_WAIT将立刻被清除并打印警告信息。默认180000,此项参数可控制TIME_WAIT 最大数量
net.ipv4.tcp_max_tw_buckets = 5000

#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如超过,连接将即刻被复位并打印警告信息,这个限制仅是为防止简单的DoS攻击,不能过分依靠它或人为减小这个值,更应该增加这个值(如果增加内存后)
net.ipv4.tcp_max_orphans = 3276800

#为打开对端的连接,内核需发送个SYN并附带个回应前一个SYN的ACK。即三次握手中的第二次握手。该设置决定内核放弃连接前发SYN+ACK包的数量。
net.ipv4.tcp_synack_retries = 3

#如web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认511,所以有必要调整这个值。
net.core.somaxconn = 32768

sysctl -p

4.实战演练:Haproxy搭建web群集

在这里插入图片描述

4.1 Haproxy服务(CentOS 7-6)

IP:192.168.80.60

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)YUM安装Haproxy服务

###使用在线源安装haproxy服务
cd /etc/yum.repos.d
mv repo.bak ./
mv local.repo repo.bak
yum install -y haproxy
cp /etc/haproxy/haproxy.cfg  /etc/haproxy/haproxy.cfg.bak

(2)Haproxy服务配置

vim  /etc/haproxy/haproxy.cfg
--------------在global全局块中修改以下内容------------------------
global
-------------------------------------------------------------------------------
    log         127.0.0.1 local0 info
    log         127.0.0.1 local1 warning
             
    #chroot      /var/lib/haproxy             #此行注释掉 
    maxconn     40000                           #修改最大啊连接数为40000
    spread-checks 2                    #设置每两秒钟进行一次健康检查
    #nbproc 2

--------------在defaults默认块中修改以下内容------------------------
defaults
-------------------------------------------------------------------------------
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-keep-alive
    option forwardfor       except 127.0.0.0/8
    maxconn                 30000    #此处最大连接数需要修改为小于全局配置的最大连接数

#定义前端域
frontend http-in
    #监听任意地址的80端口
    bind *:80
    #通过acl过滤符合条件的静态页面请求
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html .htm .txt
    
    #将符合acl条件的静态页面请求转发到static_backend后端域,将其它所有请求转发到dynamic_backend后端域中
    use_backend static_backend          if url_static
    default_backend    dynamic_backend

backend static_backend
    balance     roundrobin
    
    #健康检查,必须要有test.html文件存在,否则会报错,页面内容是啥不重要
    option   httpchk GET /test.html
    server   inst1  192.168.80.70:80 check inter 2000 rise 2 fall 3      #使用节点服务器70和80的80端口,提供本haproxy服务转发的静态和动态页面访问请求
    server   inst2  192.168.80.80:80 check inter 2000 rise 2 fall 3

backend dynamic_backend
    balance     roundrobin
    option http-server-close
    cookie HA_STICKY_dy insert indirect nocache
    server  app1 192.168.80.70:8080 cookie appser1 check
    server  app2 192.168.80.80:8080 cookie appser2 check

注意: haproxy服务器需要先将cookie HA_STICKY_dy insert indirect nocache选项注释掉,否则浏览器访问无法查看页面跳转的效果.

在这里插入图片描述

(3)启动Haproxy服务

systemctl start haproxy.service 
systemctl enable haproxy.service 
systemctl status haproxy.service 
netstat -lntp | grep :80

在这里插入图片描述
(4)浏览器访问静态页面测试

http://192.168.80.60/static/index.html

在这里插入图片描述
在这里插入图片描述

(5)浏览器访问动态页面测试

http://192.168.80.60/test/index.jsp

在这里插入图片描述
在这里插入图片描述

4.2 配置监控页面功能

listen stats
    bind *:1080       #定义监控端口号
    stats  enable
    stats  refresh 30s
    stats  uri /stats
    stats  realm HAProxy\ Stats
    stats  auth admin:admin123   #设置登录用户为admin,密码为admin123

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.3 配置日志文件地址

###为rsyslog添加haproxy日志的配置
vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644
$FileOwner haproxy
local1.* /var/log/haproxy/haproxy_warning.log
local0.* /var/log/haproxy/haproxy_info.log

###修改 rsyslog 的启动参数
 vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r -m 0"

###启动日志服务
service rsyslog restart
systemctl restart haproxy
ls /var/log/haproxy      #查看新生成的haproxy服务日志文件
cat  /var/log/haproxy/haproxy_info.log

4.4 Apache+Tomcat服务(CentOS 7-7)

IP:192.168.80.70

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)安装并启动Apache服务,制作静态网页页面内容

yum install -y httpd
mkdir -p  /var/www/html/static
###准备Apache服务的网页目录内容
vim /var/www/html/static/index.html
<html>
<body>
<title>Apache70 jingtai web test!</title>
<h1>IP:192.168.80.70!This is 70 jinggtai web1!</h1>
</body>
</html>

systemctl start httpd
systemctl enable httpd
systemctl status httpd
netstat -lntp | grep :80

在这里插入图片描述
(2)浏览器访问验证测试

http://192.168.80.70/static/index.html

在这里插入图片描述

(3)安装并启动Tomcat服务,制作动态网页页面内容

###将tomcat安装包移动到/usr/local/tomcat目录下
cd /opt
rz -E  
tar xf apache-tomcat-9.0.16.tar.gz
mv  /opt/apache-tomcat-9.0.16 /usr/local/tomcat
java -version     #系统自带的jdk安装环境,此处便不再安装jdk环境
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

###启动tomcat服务
/usr/local/tomcat/bin/startup.sh 
netstat -lntp | grep java

在这里插入图片描述

mkdir   /usr/local/tomcat/webapps/test
vim  /usr/local/tomcat/webapps/test/index,jsp
<html>
<body>
<title>Tomcat70 dongtai JSP test!</title>
<h1>IP:192.168.80.70!This is 70 dongtai web1!</h1>
</body>
</html>

/usr/local/tomcat/bin/startup.sh 
netstat -lntp | grep java

在这里插入图片描述

(4)浏览器访问验证测试

http://192.168.80.70/test/index.jsp

在这里插入图片描述

4.5 Apache+Tomcat服务(CentOS 7-8)

IP:192.168.80.80

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)安装并启动Apache服务,制作静态网页页面内容

yum install -y httpd
mkdir -p  /var/www/html/static
###准备Apache服务的网页目录内容
vim /var/www/html/static/index.html
<html>
<body>
<title>Apache80 jingtai web test!</title>
<h1>IP:192.168.80.80!This is 80 jinggtai web2!</h1>
</body>
</html>

systemctl start httpd
systemctl enable httpd
systemctl status httpd
netstat -lntp | grep :80

在这里插入图片描述
(2)浏览器访问验证测试

http://192.168.80.80/static/index.html

在这里插入图片描述
(3)安装并启动Tomcat服务,制作动态网页页面内容

###将tomcat安装包移动到/usr/local/tomcat目录下
cd /opt
rz -E  
tar xf apache-tomcat-9.0.16.tar.gz
mv  /opt/apache-tomcat-9.0.16 /usr/local/tomcat
java -version     #系统自带的jdk安装环境,此处便不再安装jdk环境
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

###启动tomcat服务
/usr/local/tomcat/bin/startup.sh 
netstat -lntp | grep java

在这里插入图片描述

mkdir   /usr/local/tomcat/webapps/test
vim  /usr/local/tomcat/webapps/test/index.jsp
<html>
<body>
<title>Tomcat80 dongtai JSP test!</title>
<h1>IP:192.168.80.80!This is 80 dongtai web2!</h1>
</body>
</html>

/usr/local/tomcat/bin/startup.sh 
netstat -lntp | grep java

在这里插入图片描述

(4)浏览器访问验证测试

http://192.168.80.80/test/index.jsp

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

苹果新专利曝光:AirTags可以快速找到Apple Pencil

近日&#xff0c;据外媒报道&#xff0c;苹果一项新专利提出&#xff0c;苹果手写笔可以通过“声学谐振器”来帮助用户找出手写笔的位置。根据这项专利&#xff0c;苹果试图在手写笔的笔盖上加入一个被动元件&#xff0c;以响应特定的声波频率。iPhone、iPad或Apple Watch会发出…

插入排序代码

时间复杂度O&#xff08;n&#xff09;

Nik Color Efex 滤镜详解(2/5)

交叉冲印 Cross Processing 提供多种选项来处理 C41 - E6&#xff08;用幻灯片显影液处理彩色底片&#xff09;和 E6 - C41&#xff08;用彩色底片显影液处理幻灯片&#xff09;。 方法 Method 选择预设。 强度 Strength 控制滤镜效果程度。 黑暗对比度 Dark Contrasts 使用新…

六一,用前端做个小游戏回味童年

#【六一】让代码创造童话&#xff0c;共建快乐世界# 文章目录 &#x1f4cb;前言&#x1f3af;简简单单的弹球游戏&#x1f3af;代码实现&#x1f4dd;最后 &#x1f4cb;前言 六一儿童节。这是属于孩子们的节日&#xff0c;也是属于我们大人的节日&#xff08;过期儿童&…

Intellij IDEA设置“选中变量或方法”的背景颜色、字体颜色(Mark Occurrences)

背景 IDEA 中选中一个变量就会将所有的变量相关变量标出来&#xff0c;这样就很方便知道这个变量出现的地方。Eclipse里头把这个功能叫做 Mark Occurrences&#xff0c;IDEA 里不知道怎么称呼。 我们要解决的痛点就是提示不明显&#xff0c;如下图所示&#xff0c;Macbook这么…

LVS负载均衡群集

文章目录 LVS负载均衡群集1 企业群集1.1 群集cluster的定义1.2 解决办法1.3 企业群集分类1.4 概念1.4.1 负载均衡群集1.4.2 高可用群集1.4.3 高性能运算 群集 2 负载均衡2.1 负载均衡结构2.2 负载均衡群集工作模式2.2.1 NAT模式2.2.2 TUN模式2.2.3 DR模式 3 LVS虚拟服务器3.1 负…

LeetCode 892. Surface Area of 3D Shapes【数组,数学】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

大数据基础平台实施及运维

一、大数据介绍 1、为什么使用大数据技术 数据量越来越大&#xff0c;数据分析的实时性越来越强&#xff0c;数据结果应用范围越来越广。&#xff08;从用户的访问量、量、访问时间、访问频率&#xff0c;市场可以得到很多信息&#xff09; 2、大数据的定义 数据收集、数据…

使用python制作一个批量查询搜索排名的SEO免费工具

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 搭建背景 最近工作中需要用…

【详解】篮球记分牌硬件及代码

篮球记分牌设计 1 系统设计1.1 设计任务 1.2 性能指标要求1.2 设计思路及设计框图1.2.1设计思路1.2.2总体设计框图1.2.3电路原理图1.2.3 PCB布线图 2 主要程序模块的设计及原理2.1 外部中断0 2.2 菜单2.3 两队比分及两队犯规次数显示及修改2.3.1选择功能2.3.2修改功能2.3.3显示…

Steemit 会颠覆 Quora/知乎 甚至 Facebook 吗?

Steemit是基于区块链技术的社交媒体平台&#xff0c;其独特的激励机制吸引了众多用户。然而&#xff0c;是否能够真正颠覆Quora、知乎甚至Facebook这些已经成为社交巨头的平台&#xff0c;仍然存在着许多未知因素。本文将探讨Steemit的优势和挑战&#xff0c;以及其在社交领域中…

HTML5 语义元素(一)页面结构

本篇主要介绍HTML5增加的语义元素中关于页面结构方面的&#xff0c;包含&#xff1a; <article>、<aside>、<figure>、<figcaption>、<footer>、<header>、<main>、<nav>、<section>等元素。 目录 1. 语义元素介绍 1.…

Vue中如何进行移动端适配与响应式布局?

Vue中如何进行移动端适配与响应式布局&#xff1f; 如今&#xff0c;移动端适配与响应式布局已经成为Web开发中不可或缺的一部分。Vue.js作为一款流行的JavaScript框架&#xff0c;也提供了许多有用的工具和技术来实现移动端适配和响应式布局。在这篇文章中&#xff0c;我们将…

Stable-Diffusion|文生图 拍立得纪实风格的Lora 图例(三)

上篇【Stable-Diffusion|入门怎么下载与使用civitai网站的模型&#xff08;二&#xff09;】介绍了如何使用c站进行文生图&#xff0c;尤其一些Lora可能随时会下架&#xff0c;所以及时测试&#xff0c;及时保存很关键&#xff0c;更新一些笔者目前尝试比较有意思的Lora。 本篇…

hadoop基础(二)

JAVA客户端 环境搭建 创建Maven项目,添加Hadoop依赖. <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId…

CTFHub | php://input

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

selenium:元素定位之xpath、css

元素定位是在做UI自动化测试中最重要的一环&#xff0c;要牢牢掌握定位的方法&#xff0c;才能更有效率的进行UI自动化测试。 常见的元素定位方式&#xff1a; idnametag_nameclass_namelink_textpartial_link_textxpathcss 其中id&#xff0c;name是具有唯一性的&#xff0…

用HTML5制作精美战机游戏

每天要被大学老师催H5作业&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb; 不如看看本文&#xff0c;代码齐全&#xff0c;直接用来做参考案例&#x1f44c;&#x1f3fb; 干货满满不看后悔&#x1f44d;&#x1f44d;&#x1f44d; 代码…

最终版:1分钟自动部署数字人平台并提供web服务:唇形合成(wav2lip) + 超分修复(codeformer),

Demo效果 本文实现步骤:数字人形象(AI绘画) -> 文字转语音(谷歌tts) -> 表情迁移 -> 唇形合成 -> 视频超分 上述步骤所有技术均已在此专栏发布,可点击上方专栏查看具体博文 所有技术依赖环境及api接口均封装打包完毕,使用docker一键部署,预计耗时10分钟 原图 …