第十九周--作业
1、haproxy https的实现
#配置HAProxy支持https协议,支持ssl会话; bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE #crt 后证书文件为PEM格式,且同时包含证书和所有私钥 cat demo.crt demo.key > demo.pem #把80端口的请求重向定443 bind *:80 redirect scheme https if !{ ssl_fc } #向后端传递用户请求的协议和端口(frontend或backend) http_request set -header X-Forwarded-Port %[dst_port] http_request add-header X-Forwared-Proto https if { ssl_fc } #证书制作 mkdir /etc/haproxy/certs/ cd /etc/haproxy/certs/ openssl genrsa - out haproxy.key 2048 openssl req - new -x509 -key haproxy.key - out haproxy.crt -subj "/CN=www.magedu.org" cat haproxy.key haproxy.crt > haproxy.pem openssl x509 - in haproxy.pem -noout -text #查看证书 https配置示例 cat /etc/haproxy/conf.d/test.cfg frontend magedu_http_port bind 10.0.0.7:80 bind 10.0.0.7:443 ssl crt /etc/haproxy/certs/haproxy.pem redirect scheme https if !{ ssl_fc } # 注意{ }内的空格 http-request set -header X-forwarded-Port %[dst_port] http-request add-header X-forwarded-Proto https if { ssl_fc } mode http balance roundrobin log global option httplog ###################### acl setting ############################### acl mobile_domain hdr_dom(host) -i mobile.magedu.org ###################### acl hosts ################################# default_backend pc_hosts ################### backend hosts ################################# backend mobile_hosts mode http server web1 10.0.0.17:80 check inter 2000 fall 3 rise 5 backend pc_hosts mode http #http-request set-header X-forwarded-Port %[dst_port] 也可加在此处 #http-request add-header X-forwarded-Proto https if { ssl_fc } server web2 10.0.0.27:80 check inter 2000 fall 3 rise 5 #验证https curl -IkL http: //www.magedu.org HTTP/1.1 302 Found content-length: 0 location: https: //www.magedu.org/ cache-control: no-cache HTTP/1.1 200 OK date: Sat, 04 Apr 2020 02:31:31 GMT server: Apache/2.4.6 (CentOS) PHP/5.4.16 last-modified: Thu, 02 Apr 2020 01:44:13 GMT etag: "a-5a244f01f8adc" accept-ranges: bytes content-length: 10 content-type: text/html; charset=UTF-8 [root@centos6 ~]#curl -Ik https: //www.magedu.org HTTP/1.1 200 OK date: Sat, 04 Apr 2020 02:31:50 GMT server: Apache/2.4.6 (CentOS) PHP/5.4.16 last-modified: Thu, 02 Apr 2020 01:44:28 GMT etag: "a-5a244f0fd5175" accept-ranges: bytes content-length: 10 content-type: text/html; charset=UTF-8 |
2、总结tomcat的核心组件以及根目录结构
#目录结构 bin 服务启动、停止等相关程序和文件 conf 配置文件 lib 库目录 logs 日志目录 webapps 应用程序,应用部署目录 work jsp编译后的结果文件,建议提前预热访问 #组件分层和分类 顶级组件 Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突 服务类组件 Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine 连接器组件 Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。 容器类 Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。 内嵌类 可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。 集群类组件 listener、cluster |
3、tomcat实现多虚拟主机
#准备数据目录 mkdir /data/website{1,2,3}/ROOT -pv vim /data/website1/ROOT/index.html www.a.com /data/website1/ROOT/index.html vim /data/website2/ROOT/index.html www.b.com /data/website2/ROOT/index.html vim /data/website3/ROOT/index.html www.c.com /data/website3/ROOT/index.html #设置权限 chown -R tomcat.tomcat /data/website{1,2,3}/ #修改配置 cd /usr/local/tomcat/ vim conf/server.xml </Host> <Host name= "www.a.com" appBase= "/data/website1/" unpackWARs= "true" autoDeploy= "true" > </Host> <Host name= "www.b.com" appBase= "/data/website2/" unpackWARs= "true" autoDeploy= "true" > </Host> <Host name= "www.c.com" appBase= "/data/website3/" unpackWARs= "true" autoDeploy= "true" > </Host> </Engine> </Service> </Server> #重启Tomcat服务 systemctl restart tomcat.service #测试访问 vim /etc/hosts 10.0.0.7 www.a.com www.b.com www.c.com curl www.a.com:8080 www.a.com /data/website1/ROOT/index.html curl www.b.com:8080 www.b.com /data/website2/ROOT/index.html curl www.c.com:8080 www.c.com /data/website3/ROOT/index.html |
4、简述memcached的工作原理
memcached是一套C/S模式架构的软件,在服务器端启动服务守护进程,可以为memcached服务器指定监听的IP地址、端口号、并发访问连接数、以及分配多少内存来处理客户端的请求的参数; memcached软件是由C语言来实现的,全部代码仅有2000多行,采用的是异步I/O,其实现方式是基于事件的单进程和单线程的。使用libevent作为事件通知机制,多个服务器端可以协同工作,但这些服务器端之间是没有任何通信联系的,每个服务器只对自己的数据进行管理。应用程序端通过指定缓存服务器的IP地址和端口,就可以连接memcached服务进行相互通信。 需要被缓存的数据以Key/Value键值对的形式保存在服务器端预分配的内存空间中,每个被缓存的数据都有唯一的标识Key,操作memcached中的数据是通过这个唯一标识Key进行的。缓存到Memcached中的数据仅放置在memcached服务预分配的内存中,而非储存在磁盘中,因此存取速度非常快; 由于Memcached服务自身没有对缓存的数据进行持久性存储的设计,因此,在服务器端的memcached服务进程重启之后,存储在内存中的这些数据就会丢失。且当内存中缓存的数据容量达到启动时设定的内存值时,就自动使用LRU(最近最少使用算法)算法删除过期的缓存数据。 memcached软件开发的早,当初仅为缓存而设计的,因此在设计之初并没有过多考虑数据的永久性问题。因此如果使用memcached作为缓存数据服务,要考虑数据丢失后带来的问题,例如:是否可以重新生成数据,还有,在高并发场合数据丢失会不会导致网站架构雪崩。 为了满足数据可以持久性保留的需求,sina网基于memcached服务开发了一款NoSQL软件,名字叫MemcacheDB,可以实现在缓存的基础上增加了持久缓存的特性。 memcached支持各种语言编写的客户端API,包括PHP 、PYthon、Java、C等; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通