本实验是在上一篇实验的基础上进行的,已经安装好nginx,并完成性能优化。具体实现过程见上一篇:Nginx服务(2)——nginx源码安装及性能优化


文章目录

  • 一、实现https加密
  • 1、熟悉https加密
  • 2、实验环境
  • 3、实验
  • 二、nginx服务重定向
  • 1、rewrite重写规则
  • 2、了解什么是服务重定向
  • 3、访问http自动调转到https
  • 方式一:301临时重定向
  • 方式二:302永久重定向
  • 方式三:添加虚拟主机
  • 方式四:重定向到不同域名
  • 方式五:多次重定向
  • 方式六:整合


一、实现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

功能

server1

172.25.1.1

nginx服务器

真机

172.25.1.250

客户端,用来测试

3、实验

在server1(服务端)
添加443端口,实现http到https的加密

步骤一:关闭nginx服务,下载openssl-devel
需要安装openssl-devel,是编译ssl模块需要的依赖包

ps aux | grep nginx
kill -9 14344 14516  #杀掉所有nginx进程 
yum install -y openssl-devel

nginx 目录 密码 nginx加密码_html


nginx 目录 密码 nginx加密码_重定向_02


步骤二:重新编译(主要是为了添加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

nginx 目录 密码 nginx加密码_nginx 目录 密码_03


报错提醒:

./configure: error: the HTTP image filter module requires the GD library.

You can either do not enable the module or install the libraries.

解决办法:
安装gd.x86_64 和gd-devel-2.0.35-26.el7.x86_64.rpm
点击下载gd-devel安装包

yum install  -y gd.x86_64 gd-devel-2.0.35-26.el7.x86_64.rpm

nginx 目录 密码 nginx加密码_重定向_04


重新编译:

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

nginx 目录 密码 nginx加密码_nginx 目录 密码_05


步骤三:编译安装

make && make install

nginx 目录 密码 nginx加密码_nginx_06


步骤四:制作证书

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 目录 密码 nginx加密码_nginx_07


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

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

nginx 目录 密码 nginx加密码_html_08


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

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 目录 密码 nginx加密码_nginx 目录 密码_09


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

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

nginx 目录 密码 nginx加密码_html_10


在真机(客户端)测试

步骤一:添加本地解析

vim /etc/hosts

172.25.1.1 www.westos.org

nginx 目录 密码 nginx加密码_nginx 目录 密码_11


步骤二:浏览器访问

nginx 目录 密码 nginx加密码_nginx 目录 密码_12


nginx 目录 密码 nginx加密码_nginx_13

nginx 目录 密码 nginx加密码_重定向_14

nginx 目录 密码 nginx加密码_nginx_15

nginx 目录 密码 nginx加密码_nginx_16

二、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

nginx 目录 密码 nginx加密码_重定向_17


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

curl -I www.taobao.com

nginx 目录 密码 nginx加密码_重定向_18


返回301,表示永久重定向。访问到总站地址。

3、访问http自动调转到https
方式一:301临时重定向

在server1(服务端)

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

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

nginx 目录 密码 nginx加密码_html_19

nginx 目录 密码 nginx加密码_nginx_20


查看服务端发布目录下的文件:

nginx 目录 密码 nginx加密码_nginx 目录 密码_21


在客户端(真机)上测试

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

nginx 目录 密码 nginx加密码_html_22

由次可以得出:nginx访问显示重定向,不检测$1是否存在真机(客户端)测试

浏览器访问http重定向到https

nginx 目录 密码 nginx加密码_nginx_23

方式二:302永久重定向

在server1(服务端)

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

永久重定向

nginx 目录 密码 nginx加密码_nginx 目录 密码_24


nginx 目录 密码 nginx加密码_nginx 目录 密码_25

在客户端(真机)上测试

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

nginx 目录 密码 nginx加密码_html_26

浏览器访问http重定向到https

nginx 目录 密码 nginx加密码_nginx_23

方式三:添加虚拟主机

在server1(服务端)

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

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

nginx 目录 密码 nginx加密码_html_28


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

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

nginx 目录 密码 nginx加密码_html_29


真机(客户端)测试

步骤一:添加本地解析

vim /etc/hosts
172.25.1.1  bbs.westos.org

nginx 目录 密码 nginx加密码_html_30


步骤二:浏览器访问

nginx 目录 密码 nginx加密码_html_31

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

在server1(服务端)

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

nginx 目录 密码 nginx加密码_nginx 目录 密码_32

nginx -s reload  #重启

nginx 目录 密码 nginx加密码_重定向_33


真机(客户端)测试

curl -I www.westos.org/bbs

nginx 目录 密码 nginx加密码_nginx_34


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

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

nginx 目录 密码 nginx加密码_html_35


404报错,不符合文件配置

方式五:多次重定向

在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;
}

nginx 目录 密码 nginx加密码_nginx_36


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

nginx 目录 密码 nginx加密码_重定向_37

真机(客户端)测试

nginx 目录 密码 nginx加密码_重定向_38

方式六:整合

在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 目录 密码 nginx加密码_nginx_39

nginx -s reload

nginx 目录 密码 nginx加密码_重定向_40


步骤二:整合目录

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

nginx 目录 密码 nginx加密码_nginx 目录 密码_41


真机(客户端)测试

nginx 目录 密码 nginx加密码_nginx_42

nginx 目录 密码 nginx加密码_nginx 目录 密码_43