第十九周--作业

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等;

  

posted @   এ蓝桉、  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示