Nginx Https(十五)

1. Nginx Rewrite回顾

动静分离

$http_user_agent
手机
	iphone
	andriod
电脑

Nginx Rewrite
	rewrite		url替换			rewrite 正则 真实的文件  flag
	return		http->https  	return  状态码  跳转后的地址(可以使用变量)
		301		permanent
		302		==redirect==
	rewrite ^(.*)$ https://$server_name$1 redirect;
	return 302 https://$server_name$request_uri;
	break:
	last:

2. DNS解析与网页窜改

DNS劫持原理图

在这里插入图片描述

模拟DNS劫持

实验前提:我们本来要通过dns解析之后,直接访问源站的,我们手动在hosts文件中把通往源站的ip改为被劫持到其他站的ip(类似于DNS劫持),通过这个站(类似于代理站)去访问源站然后源站返回资源给代理站,代理站替换数据(加广告),然后返回给用户。

用户访问一个网站,然后被dns劫持后,引到其他的服务器(类似于负载均衡)

(1)web01上的配置(相当于源站)

在这里插入图片描述

(2)七层负载均衡的配置(相当于被劫持到的站点)

用户访问一个网站,然后被dns劫持后,引到其他的服务器(类似于负载均衡),
这个服务器

在这里插入图片描述

sub_filter  '' '';
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1548388386797&di=b7ba40a1f0f42f35be5a6be629dda7bb&imgtype=0&src=http%3A%2F%2Fpic125.nipic.com%2Ffile%2F20170324%2F10616187_132808685036_2.jpg" alt="">

解决DNS劫持:

如何解决dns劫持:在hosts中绑定dns解析,就不会被篡改了 (并不是源站被篡改了)
代码没有被串改,只是把数据回传给用户的时候,把内容给替换了

加上https就不会被篡改,因为代理服务器没有办法
通过CA去验证证书,没有办法获取公钥,windows可以
验证,因为有根证书机构,会查CA,有专门存放证书的
位置,安卓手机也有,每一年更新一次

3. SSL安全原理与证书介绍

在这里插入图片描述

在这里插入图片描述

颁发证书的过程:

CRL服务器:CA把已经吊销的证书放在这个服务器里面(会一个一个查)
性能非常差
OCSP就当前一个证书进行查询,这个性能也不高

在这里插入图片描述

CRL服务器:CA把已经吊销的证书放在这个服务器里面(会一个一个查)
性能非常差  

OCSP就当前一个证书进行查询,这个性能也不高
wb服务器nginx支持OCSP的一个开关,如果打开的话,
那么nginx服务器,会自动的到OCSP响应程序上查询证书还有多久过期  

大量客户端访问服务器的时候,nginx就是返回证书,是否有效。

证书的类型:

Https证书的类型
	DV
	OV
	EV

在这里插入图片描述

Https注意事项:

在这里插入图片描述

HTTPS证书购买选择:

HTTPS证书购买选择
保护1个域名 www
保护5个域名 www images cdn test m
通配符域名 *.oldboy.com

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

4. CA机构颁发SSl加密证书(配置单台Nginx支持Https)

(1)环境准备
在这里插入图片描述

#nginx必须有ssl模块
[root@Nginx ~]# nginx -V
 --with-http_ssl_module
 
#创建存放ssl证书的路径
[root@Nginx ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx ~]# cd /etc/nginx/ssl_key

(2)使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eUFa4caK-1675616116575)(6F01E95D31374BB9BDED619DE460C094)]

生成证书
openssl genrsa -idea -out server.key 2048  

(3)生成自签证书,同时去掉私钥的密码

在这里插入图片描述

openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

(4)证书申请完成后需要了解Nginx如何配置Https
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mQZAN1Uw-1675616116577)(FB29E25EB0FD482B95083213F97DEA49)]

(5)配置Nginx配置Https实例


在这里插入图片描述

配置nginx
[root@Nginx ~]# cat /etc/nginx/conf.d/ssl.conf
server {
    listen 443;
    server_name s.oldboy.com;
    ssl on;
    ssl_certificate   ssl_key/server.crt;
    ssl_certificate_key  ssl_key/server.key;
    location / {
        root /code;
        index index.html;
    }
}

#准备对应的站点目录, 并重启Nginx服务
[root@Nginx ~]# mkdir -p /code
[root@Nginx ~]# echo "Https" > /code/index.html
[root@Nginx ~]# systemctl restart nginx

如果希望http的流量全部导入到https上


[root@web01 conf.d]# vim s.oldboy.conf 
server {
        listen 443;
        server_name s.oldboy.com;
        root /code;
        ssl on;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        location / {
                index index.html;
        }
}
server {
        listen 80;
        server_name s.oldboy.com;
        return 302 https://$server_name$request_uri;
}

5. 配置Nginx集群全站Https

实现原理:

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

(1)负载均衡的配置

upstream website{
        server 172.16.1.7:80;
        server 172.16.1.8:80;
}

server {
        listen  443;  # 新版本 listen 443 ssl;
        server_name s.oldboy.com;
        ssl on;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        location / {
                proxy_pass http://website;
                proxy_set_header Host $http_host;
        }

}
server {
        listen 80;
        server_name s.oldboy.com;
        return 302 https://$server_name$request_uri;
}

自己在生成负载均衡上面生成一个密钥(因为web01中有了,所以直接拉过来用了)

在这里插入图片描述

(2)web01和web02的配置

server{
        listen 80;
        server_name s.oldboy.com;
        root /code;
        location / {
                index index.html;
        }

}

echo "web01..." > /code/index.html  
echo "web02..." > /code/index.html

nignx -t  
systemctl restart nginx

6. 配置Nginx集群全站Https(php问题)

在登录blog.oldboy.com时会出现不能登录,或者内容错乱,这个是因为php不知道用什么协议,只需要告诉php前端用的什么协议就行了。
在后端web中添加参数:

fastcgi_param HTTPS on;

(1)负载均衡器的配置

[root@lb01 conf.d]# cat proxy_oldboy.com.conf 
upstream node {
	server 10.0.0.7:80;
	server 10.0.0.8:80;
}

server {
	listen 80;
	server_name blog.oldboy.com;
	return 302 https://$server_name$request_uri;
}

server {
	listen 443;
	server_name blog.oldboy.com;
	ssl on;
	ssl_certificate ssl_key/server.crt;
   	ssl_certificate_key ssl_key/server.key;
	location / {
		proxy_pass http://node;
		include proxy_params;
	}
}


server {
	listen 80;
	server_name zh.oldboy.com;
	return 302 https://$server_name$request_uri;
}
server {
	listen 443;
	server_name zh.oldboy.com;
	ssl on;
	ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
	location / {
		proxy_pass http://node;
		include proxy_params;
	}
}

(2)后端web的配置

[root@web01 conf.d]# cat blog.oldboy.com.conf 
server {
	listen 80;
	server_name blog.oldboy.com;
	root /code/wordpress;
	client_max_body_size 100m;

	location / {
		index index.php index.html;
	}

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param HTTPS on;
		include fastcgi_params;
	}
}

7. 配置阿里云SLB全站HTTPS集群

公网单台服务器配置https

server {
        listen 443;
        server_name blog.lingxiao998.com;
        root /code/wordpress;
        client_max_body_size 100m;
        ssl on;
        ssl_certificate ssl_key/1775624_blog.lingxiao998.com.pem;
        ssl_certificate_key ssl_key/1775624_blog.lingxiao998.com.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 1440m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
}

server {
	listen 80;
	server_name blog.lingxiao998.com;
	return 302 https://$server_name$request_uri;
}

8. 知识点总结

ssl发展史
ca证书机构如何颁发证书。怎么配置证书,浏览器怎么验证证书。
配置https证书,nginx+web集群配置https   php  fastcgi_param HTTPS on;
阿里云配置单台    阿里云配置SLB


实现全站https (30-40分钟)
nginx+多台web+nfs+mysql+redis+https
	wordpress
	zh
	phpmyadmin
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值