本实验是在上一篇实验的基础上进行的,已经安装好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
步骤二:重新编译(主要是为了添加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
报错提醒:
./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
重新编译:
./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报错,不符合文件配置
方式五:多次重定向
在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;
}
先匹配第一条重写规则定向到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/ .
真机(客户端)测试: