重定向
Redirect [status] URL-path URL
status状态:
Permanent: 返回永久重定向状态码 301,(适合在不用的域名上使用,www.360buy.com)
Temp:返回临时重定向状态码302或307. 此为默认值
工作原理,向360buy.com发送请求包,重定向再向jd.com再发送请求,两次请求数据包。(有截持风险)
注意:curl -I www.360buy.com
HTTP/1.1 301 Moved Permanently
curl -I www.jd.com
HTTP/1.1 302 Moved Temporarily
curl -L www.jd.com 默认curl 是发一个数据包的。如果是Permanent,是需要发送多个数据包。
示例:
<virtualhost *:80>
documentroot /data/asite
servername www.a.com
<Directory "/data/asite">
Require all granted
</Directory>
Redirect temp / http://www.b.com/ # / :指的是返回到本根域,这里指www.a.com
#Redirect Permanent / http://www.b.com/
#RewriteEngine on #可以使用rewrite模块,类似Temp
#RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
</virtualhost>
测试使用curl -IL www.a.com
(适合有虚拟主机的重写向,如果没有虚拟主机,使用curl -Lk查看会产生循环。提示maximum redirects followed)
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
redirect temp / https://www.a.com/ 如果使用这种重定向会产生循环。提示maximum redirects followed,使用rewriteEngine就行。
实验:通过rewrite来实现http到https的重定向
启用模块#LoadModule rewrite_module modules/mod_rewrite.so
<virtualhost *:80>
documentroot /data/asite
ServerName www.zjol.com.cn
<Directory "/data/asite">
Require all granted
</Directory>
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
</virtualhost>
<virtualhost *:443>
documentroot /data/zjol
ServerName www.zjol.com.cn
<Directory "/data/zjol">
Require all granted
</Directory>
SSLCertificateFile /etc/pki/CA/certs/zjol.com.cn_public.crt
SSLCertificateKeyFile /etc/pki/CA/certs/zjol.com.cn.key
SSLCertificateChainFile /etc/pki/CA/certs/zjol.com.cn_chain.crt
</virtualhost>
21、HSTS:(严格传输安全)
注意:防止重定向时有数据有截持风险。
HTTP Strict Transport Security 服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。
浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程
HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,
会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表。
HSTS的作用 :
可以避免因为重定向的过程中被劫持
缺点:无法避免第一次请求的过程中被劫持。所以有了HSTS preload list
实现HSTS示例:
<virtualhost *:80>
documentroot /data/asite
ServerName www.zjol.com.cn
<Directory "/data/asite">
Require all granted
</Directory>
Header always set Strict-Transport-Security "max-age=31536000" #启用并设置HSTS时间。
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
</virtualhost>
<virtualhost *:443>
documentroot /data/zjol
ServerName www.zjol.com.cn
<Directory "/data/zjol">
Require all granted
</Directory>
Header always set Strict-Transport-Security "max-age=31536000"
SSLCertificateFile /etc/pki/CA/certs/zjol.com.cn_public.crt
SSLCertificateKeyFile /etc/pki/CA/certs/zjol.com.cn.key
SSLCertificateChainFile /etc/pki/CA/certs/zjol.com.cn_chain.crt
</virtualhost>