Nginx重要拓展应用
一、什么是HTTPS?
HTTP协议是以明文的方式传输数据的,没有进行任何加密,这就造成可能被窃听,篡改,劫持的风险。
HTTPS协议就是在在http上建立SSL加密层,对传输数据进行加密,是HTTP协议的安全版。
HTTPS主要作用:
(1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
(2)对网站服务器进行真实身份认证。
HTTPS=HTTP+信息加密+完整性校验+身份认证
HTTPS=HTTP+SSL/TLS
SSL与TLS:
TLS是SSL的升级版,使SSL更安全,并使协议的规范更精确和完善,但SSL不能共用。
在认证证书时TLS指定必须与TLS之间交换证书, SSL必须与SSL之间交换证书。
二、HTTPS的配置
1.创建证书和密钥
openssl genrsa > mage.key 2048
命令 私钥 输出 名字 大小
openssl req -new -x509 -key mage.key > mage.pem
命令 证书 新 证书格式 私钥 公钥(证书)
2.修改default.conf配置文件
1)https:端口是443 并且要加上ssl
2)将密钥和证书所在目录添加到server中
具体实现如下:
server {
listen 443 ssl;
server_name www.zyy.com;
#access_log /var/log/nginx/host.access.log main;
ssl_certificate /root/tls/mage.pem;
ssl_certificate_key /root/tls/mage.key;
location / {
root /usr/share/nginx/html;
index zyy.html;
#rewrite /zyy.html /rewrite.html;
#rewrite ^(.*) https://www.baidu.com/;
}
}
三、地址重写
地址重写含义:
用户得到的是经过处理后的URL地址。当服务器获得一个来访的URL请求时,会改写成服务器可以处理的另一个URL。地址重写后地址栏中的地址会变成正确的地址。
地址重写的优势:
可以缩短URL,隐藏实际路径,提高安全性;易于用户记忆。
案例:
案例1:使访问https://www.zyy.com访问的不是zyy.html,而是rewrite.html。
在server loacation 中增添rewrite /zyy.html /rewrite.html;
如修改default.conf配置文件中被注释掉的那一行;
注意:这里重写到的是rewrite.html文件,所以应该在对应位置增加rewrite.htm文件。如我的就是在
/usr/share/nginx/html目录下。
案例2:使访问https://www.zyy.com会跳转到https://www.baidu.com/
在server loacation 中添加rewrite ^(.*) https://www.baidu.com/;
如修改default.conf配置文件中被注释掉的那一行;
重新启动,现在访问https://www.zyy.com会跳转到https://www.baidu.com/
案例3:当用火狐浏览器访问https://www.zyy.com时,跳转到淘宝页面,其他浏览器访问不会。
在server loacation 中添加
if ($http_user_agent ~* "firefox"){
rewrite ^(.*) https://www.taobao.com/;
}
案例4:输入http://www.zyy.com访问的仍然是80端口下的main.html.如何让它跳转到https://www.zyy.com
==解决方案:==这是因为http默认的端口为80端口,如果要实现访问http://www.zyy.com跳转到https://www.zyy.com,可以在80端口下的location中增加 rewrite ^(.*) https://www.zyy.com/;
强制跳转。
但是这样做,会出现一个问题,如果我要跳转到www.main.com,也会强制跳转https://www.zyy.com/,这如何解决呢?
思路:访问www.main.com是会因为rewrite重写地址而跳转到其他地址,我们只想要当访问地址为http://www.zyy.com才实现强制跳转,所以是不是应该加一个if判断语句?那这个判断语句如何写呢?
结合案例3中的if判断语句,在chrome浏览器开发者模式下,发现host有显示www.zyy.com,因此尝试按照下面代码解决。最终成功实现了。
if ($http_host ~* "www.zyy.com"){
rewrite ^(.*) https://www.zyy.com/;
}