第十九周--作业
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等;

浙公网安备 33010602011771号