Nginx服务(6)——Nginx实现https加密以及服务重定向

一、实现https加密

1、熟悉https加密

我们知道现在到了 https 的时代了,每个优秀的网站几乎都已经开启 https。开启了 https 加密访问之后,登录你的网站,浏览器地址栏就会出现一把绿色的锁,这就是使用了超文本传输安全协议(HTTPS),是以安全为目标的HTTP通道,简单来说就是HTTP安全版。

  • https由两个部分组成:HTTP+SSL/TLS,在http基础上加上了一层加密信息模块,服务端和客户端的信息传输都会通过TLS进行加密,传输的数据都是加密后的数据;
  • 为了解决HTTP协议的这些缺陷,需要使用另一种协议:HTTPS。为了数据传输的安全性,HTTPS在http的基础上加了SSL协议,SSL依靠证书验证身份,并为浏览器和服务器之间通信加密;
  • SSL证书是一种数字证书,使用Secure Socket
    Layer协议在浏览器和web服务器之间建立一条安全通道,从而实现数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听,而且用户可以通过服务器证书验证所访问网站是否真实可靠;

加密的HTTPS和HTTP的区别:

  • 超文本传输协议HTTP协议被用于在web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的加密数据,如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以直接读取其中信息,因此,http协议不适合传输一些敏感信息;

2、实验环境

主机名ip功能
server1172.25.1.1nginx服务器
真机172.25.1.250客户端,用来测试

3、实验

在server1(服务端):

添加443端口,实现http到https的加密

步骤一:关闭nginx服务,下载openssl-devel,安装gd.x86_64 和gd-devel-2.0.35-26.el7.x86_64.rpm

需要安装openssl-devel,是编译ssl模块需要的依赖包

ps aux | grep nginx
kill -9 14344 14516  #杀掉所有nginx进程 
yum install -y openssl-devel gd.x86_64 gd-devel-2.0.35-26.el7.x86_64.rpm

在这里插入图片描述
步骤二:重新编译(主要是为了添加ssl模块)

cd nginx-1.17.8
./configure --prefix=/usr/local/nginx  --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module

步骤三:编译安装

make && make install

步骤四:制作证书

cd /etc/pki/tls/certs/
make cert.pem

Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server1   #注意此处为主机名
Email Address []:root@westos.org

在这里插入图片描述

步骤五:将证书复制到nginx配置文件所在目录

cp cert.pem  /usr/local/nginx/conf/

在这里插入图片描述

步骤六:修改配置文件,添加下面内容

   listen       443 ssl; #监听端口
   server_name  www.westos.org;
    
   ssl_certificate      cert.pem;  #证书位置
   ssl_certificate_key  cert.pem;  #私钥位置

   ssl_session_cache    shared:SSL:1m;
   ssl_session_timeout  5m;

   ssl_ciphers  HIGH:!aNULL:!MD5;  #加密方式
   ssl_prefer_server_ciphers  on;

   location / {
       root   html;  
       index  index.html index.htm;     
       }

在这里插入图片描述

步骤七:检测语法,重启服务并查看端口

nginx -t
nginx -s reload
netstat -antuple | grep 443

在这里插入图片描述

在真机(客户端)测试:

步骤一:添加本地解析

vim /etc/hosts

172.25.1.1 www.westos.org

步骤二:浏览器访问

在这里插入图片描述
在这里插入图片描述

二、nginx服务重定向

1、rewrite重写规则服务重定向

调整用户浏览的URL,看起来规范 合乎开发及产品人员的需求
为了让搜索引擎收录网站内容,让用户体验更好 企业会将动态URL地址伪装成静态地址提供服务
网站更换新域名后 例如,访问京东的360buy.com会跳转到jd.com
根据特殊的变量、目录、客户端信息进行跳转
URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中

rewrite< regex >< replacement >[flag];
关键字正则替代内容flag标记
  • 关键字:其中关键字error_log不能改变,rewrite为固定关键字,表示开始进行rewrite匹配规则
  • 正则:perl兼容正则表达式语句进行规则匹配,regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
  • 替代内容:将正则匹配的内容替换成replacement,replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
  • flag标记:rewrite支持的flag标记

regex部分说明:

字符意义
.匹配除换行符以外的任意字符
?重复0次或1次 例如“do(es)?”能匹配“do”或者“does”,"?“等效于”{0,1}"
+重复1次或更多次 如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”
*重复0次或更多次 #如“ol*”能匹配“o”及“ol”、“oll”
\d匹配数字
^匹配字符串的开始
$匹配字符串的结束
{n}重复n次
{n,}重复n次或更多次
[c]匹配单个字符c
[a-z]匹配a-z小写字母的任意一个

flag标记说明:

字符意义
last本条规则匹配完成后,继续向下匹配新的location URI规则
break本条规则匹配完成即终止,不再匹配后面的任何规则
redirect返回302,表示临时重定向,浏览器地址会显示跳转后的URL地址
permanent返回301,表示永久重定向,浏览器地址栏会显示跳转后的URL地址

2、了解什么是服务重定向

客户端(真机)访问:

curl -I taobao.com

在这里插入图片描述

302 临时重定向 ,提示正确地址为http://www.taobao.com/

curl -I www.taobao.com

在这里插入图片描述返回301,表示永久重定向。访问到总站地址。

3、访问http自动调转到https

方式一:301临时重定向

在server1(服务端):

rewrite ^/(.*)$ https://www.westos.org/$1;

$1表示用户在这里输入的内容保留,只会重定向$1前面的。不管$1文件或目录是否存在,只重定向到https://www.westos.org

在这里插入图片描述
在这里插入图片描述 查看服务端发布目录下的文件:

在这里插入图片描述

在客户端(真机)上测试:

curl -I www.westos.org
curl -I www.westos.org/index.html
curl -I www.westos.org/test.html  #test.html文件不存在,这里做测试用

在这里插入图片描述

由次可以得出:nginx访问显示重定向,不检测$1是否存在

真机(客户端)测试:
浏览器访问http重定向到https

在这里插入图片描述

方式二:302永久重定向

在server1(服务端):

rewrite ^/(.*)$ https://www.westos.org/$1 permanent;

永久重定向

在这里插入图片描述
在这里插入图片描述
在客户端(真机)上测试:

curl -I www.westos.org
curl -I www.westos.org/index.html
curl -I www.westos.org/test.html  #test.html文件不存在,这里做测试用

在这里插入图片描述浏览器访问http重定向到https

在这里插入图片描述

方式三:添加虚拟主机

在server1(服务端):

步骤一:添加一台虚拟主机,重新设置默认发布目录

server_name  www.westos.org bbs.westos.org;
location / {
            root    /bbs;
            index   index.html;
    }

在这里插入图片描述

步骤二:创建默认发布目录并重启服务

mkdir /bbs
vim /bbs/index.html  #编写默认发布文件
<h1>bbs.westos.org</h1>
nginx -s reload  #重启

在这里插入图片描述

真机(客户端)测试:

步骤一:添加本地解析

vim /etc/hosts
172.25.1.1  bbs.westos.org

步骤二:浏览器访问

在这里插入图片描述

方式四:重定向到不同域名

在server1(服务端):

rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;	#表示访问www.westos.org并且以bbs结尾的,都定向到https://bbs.westos.org/index.html

在这里插入图片描述

nginx -s reload  #重启

在这里插入图片描述
真机(客户端)测试:

curl -I www.westos.org/bbs

在这里插入图片描述

可以看到重定向到https://bbs.westos.org/index.html

curl -I www.westos.org/bbs/index.html

在这里插入图片描述
404报错,不符合文件配置

方式五:多次重定向
server {
        listen 80;
        server_name bbs.westos.org;

        location / {
                root    /bbs;
                index   index.html;
        }
}
   server {
        listen 80;
        server_name  www.westos.org;
        rewrite ^/bbs$ http://bbs.westos.org permanent;
        rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
}

在这里插入图片描述

先匹配第一条重写规则定向到bbs.westos.org,然后再定向到下一条规则

在这里插入图片描述

真机(客户端)测试:

在这里插入图片描述

方式六:整合

在server1(服务端):
步骤一:编辑配置文件

server {
        listen 80;
        server_name bbs.westos.org;

        location / {
                root    /bbs;
                index   index.html;
        }
}
   server {
        listen 80;
        server_name  www.westos.org;
        #rewrite ^/bbs$ http://bbs.westos.org permanent;
        #rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
         if ($host = "bbs.westos.org") {
                     rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
        }
        location / {
                root    html;
                index   index.html;
        }
}

在这里插入图片描述

nginx -s reload

步骤二:整合目录

cd /usr/local/nginx/html/
cp -r /bbs/ .

在这里插入图片描述

真机(客户端)测试:

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值