apache压缩页面、HTTPS介绍、HTTPS实现过程、http重定向https、正向代理和反向代理、Sendfile机制

apache压缩页面

使用mod_deflate模块压缩页面优化传输速度
适用场景:
1.节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
2.压缩适于压缩的资源,例如文本文件
LoadModule deflate_module modules/mod_deflate.so SetOutputFilter DEFLATE
SetOutputFilter DEFLATE

DeflateCompressionLevel 9 压缩比,9最高,1最低
指定压缩的文件类型:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css

排除特定旧版本的浏览器,不支持压缩
Netscape 4.x 只压缩text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html
Netscape 4.06-08三个版本 不压缩
BrowserMatch ^Mozilla/4.0[678] no-gzip
Internet Explorer标识本身为“Mozilla / 4”,但实际上是能够处理请求的压缩。如果用户代理首部匹配字符串“MSIE”(“B”为单词边界”),就关闭之前定义的限制
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

示例:
<VirtualHost *:80>
ServerName www.a.com
DocumentRoot “/www/a/doc”
<Directory “/www/a/doc”>
Options None
AllowOverride None
Require all granted
</Directory>
DeflateCompressionLevel 9
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
</VirtualHost>

HTTPS介绍

https:http over ssl
SSL会话的简化过程
1.客户端发送可供选择的加密方式,并向服务器请求证书
2.服务器端发送证书以及选定的加密方式给客户端
3.客户端取得证书并进行证书验证,如果信任给其发证书的CA则:
  验证证书来源的合法性;用CA的公钥解密证书上数字签名
  验证证书的内容的合法性:完整性验证
  检查证书的有效期限
  检查证书是否被吊销
  证书中拥有者的名字,与访问的目标主机要一致
4.客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
5.服务用此密钥加密用户请求的资源,响应给客户端

注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

HTTPS实现过程

1.为服务器申请数字证书
创建私有CA
在服务器创建证书签署请求
CA签证

2.配置httpd支持使用ssl,及使用的证书
yum -y install mod_ssl
如果是二进制安装或者编译则手动加载SSL模块
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile

配置步骤参考

1.搭建CA和证书申请参考另外一篇文章加密、密钥、CA和证书、SSH客户端

做完步骤一应该有3个文件
CA证书文件:cacert.pem
CA给HTTPS颁发的证书文件:https.crt
HTTPS的私钥文件:https.key

2.修改SSL的配置
SSLCertificateFile https.crt
SSLCertificateKeyFile https.key
SSLCACertificateFile cacert.pem

3.重启服务即可
注意:自己搭建的CA需要添加信任CA证书

http重定向https

将http请求转发至https的URL

重定向:
Redirect [status] URL-path URL

status状态:
Permanent: 返回永久重定向状态码 301
Temp:返回临时重定向状态码302. 此为默认值

示例:
Redirect temp / https://www.test.com
注意:此方法可能会造成循环重定向,推荐使用HTST

HSTS
HTTPS:HTTP Strict Transport Security
服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程

HSTS preload list
是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表

在httpd.conf中添加以下选项即可:
Header always set Strict-Transport-Security “max-age=31536000” 设置HSTS缓存时间,单位秒
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]

正向代理和反向代理

客户端
正向代理服务器
反向代理服务器
目标服务器1
目标服务器2

客户端只知道正向代理服务器,不知道反向代理服务器

启用反向代理功能

ProxyPass “/” “http://www.test.com/”
ProxyPassReverse “/” “http://www.test2.com/”

特定URL反向代理
ProxyPass “/images” “http://www.test.com/”
ProxyPassReverse “/images” http://www.test2.com/

也可以做端口映射
示例:
<VirtualHost *>
ServerName www.test.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/


Sendfile机制

不用sendfile的传统网络传输过程:
read(file, tmp_buf, len)
write(socket, tmp_buf, len)
硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协议栈一般网络应用通过读硬盘数据,写数据到socket来完成网络传输
底层执行过程:
1.系统调用read()产生一个上下文切换:从user mode切换到kernel mode,然后DMA 执行拷贝,把文件数据从硬盘读到一个kernel buffer里。

2.数据从kernel buffer拷贝到user buffer,然后系统调用 read() 返回,这时又产生一个上下文切换:从kernel mode切换到user mode

3.系统调用write()产生一个上下文切换:从user mode切换到kernel mode,然后把步骤2读到user buffer的数据拷贝到kernel buffer(数据第2次拷贝到kernel buffer),不过这次是个不同的kernel buffer,这个 buffer和socket相关联。

4.系统调用write()返回,产生一个上下文切换:从kernel mode切换到user mode(第4次切换),然后DMA从kernel buffer拷贝数据到协议栈(第4次拷贝)上面4个步骤有4次上下文切换,有4次拷贝,如能减少切换次数和拷贝次数将会有效提升性能

在kernel 2.0+ 版本中,系统调用 sendfile() 就是用来简化上面步骤提升性能的。sendfile()不但能减少切换次数而且还能减少拷贝次数。

用sendfile()来进行网络传输的过程:
sendfile(socket, file, len);
硬盘 >> kernel buffer (快速拷贝到kernel socket buffer) >> 协议栈
1.系统调用 sendfile() 通过 DMA 把硬盘数据拷贝到kernel buffer,然后数据被kernel直接拷贝到另外一个与socket 相关的kernel buffer。这里没有user mode 和kernel mode之间的切换,在kernel 中直接完成了从一个buffer到另一个buffer的拷贝

2.DMA 把数据从kernel buffer直接拷贝给协议栈,没有切换,也不需要数据从user mode拷贝到kernel mode,因为数据就在kernel里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值