16.Nginx HTTPS实践
1.不做任何修改实现http跳转https(协议间的跳转): return
[root@web01 conf.d]# cat url.cheng.com.conf
server {
	listen 80;
	server_name url.cheng.com;
	return 302 https://$http_host;
}
2.http跳转https [rewrite]
[root@web01 conf.d]# cat url.cheng.com.conf
server {
	listen 80;
	server_name url.cheng.com;
	rewrite ^/$ https://$http_host;
	}
3.rewrite中的flag
- 地址做改写 rewrite 跳转
 
1. redirect	302		临时跳转	 旧网站无影响,新网站无排名
[root@web01 conf.d]# cat url.cheng.com.conf
server {
	listen 80;
	server_name url.cheng.com;
	rewrite ^/$ https://$http_host redirect;
	}
2. permanent	301		永久跳转     新跳转网站有排名,旧网站排名清空
[root@web01 conf.d]# cat url.cheng.com.conf
server {
	listen 80;
	server_name url.cheng.com;
	rewrite ^/$ https://$http_host permanent;
	}
http  ---> https   302		浏览器不会记住新域名
http  ---> https   301		浏览器会记录新域名
4.last 本条规则匹配完成后,继续向下匹配新的location URI规则
[root@web01 conf.d]# cat url.cheng.com.conf
server {
    listen 80;
    server_name url.cheng.com;
    root /code;
    location / {
        rewrite /1.html /2.html last;
        rewrite /2.html /3.html;
    }
    location /2.html {
        rewrite /2.html /a.html;
    }
    location /3.html {
        rewrite /3.html /b.html;
    }
}
5.break #本条规则匹配完成即终止,不再匹配后面的任何规则
[root@web01 conf.d]# cat url.cheng.com.conf
server {
    listen 80;
    server_name url.cheng.com;
    root /code;
    location / {
        rewrite /1.html /2.html break;
        rewrite /2.html /3.html;
    }
    location /2.html {
        rewrite /2.html /a.html;
    }
    location /3.html {
        rewrite /3.html /b.html;
    }
}
当rewrite规则遇到break后,本location{}与其他location{}的所有rewrite/return规则都不再执行。
当rewrite规则遇到last后,本location{}里后续rewrite/return规则不执行,但重写后的url再次从头开始执行所有规则,哪个匹配执行哪个。
6.需求: 公司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。10.0.0.1 10.0.0.100
方法一:
[root@web01 conf.d]# cat sl.cheng.com.conf
server {
	listen 80;
	server_name sl.cheng.com;
	root /data;
	if ($remote_addr !~* "10.0.0.4|10.0.0.55") {
	rewrite ^(.*)/$ /wh.png break;
	}
	location / {
	index index.html;
	}
}
方法二:
[root@web01 conf.d]# cat sl.cheng.com.conf
server {
	listen 80;
	server_name sl.cheng.com;
	root /data;
	set $ip 0;
	if ($remote_addr !~* "10.0.0.4|10.0.0.55") {
		set $ip 1;
}
	if ($ip = "0") {
		rewrite ^(.*)/$ /wh.png break;
	}
	location / {
	index index.html;
	}
}
7.需求:公司网站后台/admin,只允许公司的出口公网IP可以访问,其他的IP访问全部返回500,或直接跳转至首页。
方法一:
[root@web01 conf.d]# cat sl.cheng.com.conf
server {
	listen 80;
	server_name sl.cheng.com;
	root /data;
	location /admin {
	index index.html;
	}
	if ($remote_addr !~* "10.0.0.4|10.0.0.55") {
	return 500 ;
	}
}
方法二:
[root@web01 conf.d]# cat sl.cheng.com.conf
server {
	listen 80;
	server_name sl.cheng.com;
	root /data/admin;
	if ($remote_addr !~* "10.0.0.4|10.0.0.55") {
	rewrite ^(.*)/$ https://www.xuliangwei.com;
	}
	location / {
	index index.html;
	}
}
方法三:
[root@web01 conf.d]# cat sl.cheng.com.conf
server {
	listen 80;
	server_name sl.cheng.com;
	root /data/;
	if ($remote_addr !~* "10.0.0.4|10.0.0.55") {
	return 500;
	}
	location /admin {
	index index.html;
	}
}
8.模拟不使用Https的劫持和篡改
[root@lb01 conf.d]# cat proxy_a.cheng.com.conf
server {
	listen 80;
	server_name a.cheng.com;
	location / {
	proxy_pass http://10.0.0.7;
	sub_filter 'hello PC...' '123456';
	include proxy_params;
	}
}
PS:将hello pc 替换为123456
9.HTTPS证书购买指南 cheng.com
保护1个域名 www								docs.cheng.com
保护5个域名 www images cdn test m			docs.cheng.com  www.cheng.com iamges.cheng.com
通配符域名 *.cheng.com
		1套证书
		保护所有的域名
10.HTTPS注意事项
Https不支持续费,证书到期需重新申请新并进行替换。
Https不支持三级域名解析,如 test.m.oldboy.com。
Https显示绿色,说明整个网站的url都是https的,并且都是安全的。
Https显示黄色,说明网站代码中有部分URL地址是http不安全协议的。
Https显示红色,要么证书是假的,要么证书已经过期。
11.实现单台Https
0.创建存放ssl证书的路径
[root@Nginx ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx ~]# cd /etc/nginx/ssl_key
1.生成证书 (密码1234)
[root@Nginx ~]# openssl genrsa -idea -out server.key 2048
2.生成自签证书,同时去掉私钥的密码
openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
3.配置nginx
[root@web01 conf.d]# cat s.cheng.com.conf
server {
	listen 443 ssl;
	server_name s.cheng.com;
	charset utf-8;
	root /code;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;
	location / {
	index index.html;
	}
}
server {
	listen 80;
	server_name s.cheng.com;
	return 302 https://$http_host$request_uri;
	}
>>思路:
1.先配置好后端的web节点
2.在负载均衡上申请证书(如果之前申请过也可以推送)      <----
3.配置nginx负载均衡--->http协议
4.配置域名劫持
5.配置nginx负载均衡--->转为https协议
[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf
upstream webs {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}
server {
	listen 443 ssl;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;
	server_name s.oldxu.com;
	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}
server {
	listen 80;
	server_name s.oldxu.com;
	return 302 https://$http_host$request_uri;
}
12.Wordpress网站加HTTPS
[root@lb01 conf.d]# cat proxy_word.cheng.com.conf
upstream word {
	server 172.16.1.7;
}
server {
	listen 443 ssl;
	server_name word.cheng.com;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;
	location / {
	proxy_pass http://word;
	include proxy_params;
	}
}
server {
	listen 80;
	server_name word.cheng.com;
	return 302 https://$http_host$request_uri;
}
[root@web01 conf.d]# cat word.cheng.com.conf
server {
	listen 80;
	server_name word.cheng.com;
	root /code/wordpress;
	location / {
	index index.php;
	}
	location ~ \.php$ {
	fastcgi_param HTTPS on;
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	include fastcgi_params;
	}
}
13.阿里云申请免费的证书------->真实
s.chengyinwu.com
14.SLB+ECS配置Https
1.四层配置:TCP---->6666---->添加ECS---->端口22
2.xshell连接负载公网ip 6666
安装nginx
[root@lb01 conf.d]# cat sui.cheng.com.conf
server {
	listen 8080;
	server_name sui.cheng.com;
	root /code0;
	location / {
	index index.html;
	}
}
server {
	listen 8081;
	server_name sui.cheng.com;
	root /code1;
	location / {
	index index.html;
	}
}
[root@lb01 ~]# mkdir /code0
[root@lb01 ~]# mkdir /code1
[root@lb01 ~]# echo "web01..." > /code0/index.html
[root@lb01 ~]# echo "web02..." > /code1/index.html
在nginx主配置文件删除80端口
监听配置向导----->http --80---->新建虚拟服务器组web--添加两台ECS,端口8080--8081---->检查域名---七层配置完毕
云解析--添加记录--解析至公网ip
通过浏览器访问真实域名
监听配置--->HTTPS-->443--选择证书(部署到负载均衡)--->选择web服务器组--->检查域名---七层配置完毕
监听---->删除80端口
监听配置---->http--->80--->监听转发---》HTTPS:443
通过HTTPS访问---显示web01 02实现轮询
15.需求: 部分URL走https,部分不走https
s.cheng.com/login  ---> https
[root@lb01 conf.d]# cat proxy_s.cheng.com.conf
upstream webs {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}
server {
	listen 443 ssl;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;
	server_name s.cheng.com;
	location / {
	proxy_pass http://webs;
	include proxy_params;
	}
}
server {
	listen 80;
	server_name s.cheng.com;
	if ($request_uri ~* "^/login") {
    	return 302 https://$http_host$request_uri;
	}
	location / {
	proxy_pass http://webs;
        include proxy_params;
	}
}
16.需求: 当用户请求s.cheng.com/abc时走http,其他的所有都走https
	s.oldxu.com/       ---> https
	s.oldxu.com/abc    ---> http
[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf
upstream webs {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}
server {
	listen 443 ssl;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;
	server_name s.oldxu.com;
	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}
server {
	listen 80;
	server_name s.oldxu.com;
	if ($request_uri !~* "^/abc") {
		return 302 https://$http_host$request_uri;
	}
	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}
17.https优化相关的参数?
server {
    listen 443 ssl;
    server_name nginx.bjstack.com;
    ssl_certificate ssl_key/1524377920931.pem;
    ssl_certificate_key ssl_key/1524377920931.key;
	ssl_session_cache shared:SSL:10m; 	#在建立完ssl握手后如果断开连接,在session_timeout时间内再次连接,是不需要在次建立握手,可以复用之前的连接
    ssl_session_timeout 1440m;           #ssl连接断开后的超时时间
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用的TLS版本协议
    ssl_prefer_server_ciphers on;        #Nginx决定使用哪些协议与浏览器进行通讯
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #配置加密套间
l	ocation / {
        root /soft/code;
        index index.html index.htm;
    }
}
server {
        listen 80;
        server_name nginx.bjstack.com;
        return 302 https://$server_name$request_uri;
}
18.总结
1.https:
2.https,模拟DNS劫持
3.https证书颁发流程
4.配置Https
单台服务器  LNMP架构
多台服务器	nginx+LNMP架构
1.先实现http
2.在来实现https
5.阿里云申请真是的证书 --->捆绑对应的域名
6.配置SLB+ECS集群--->http方式
7.配置SLB+ECS集群--->https方式
8.将http的所有请求--->https上
9.SLB如何支持多个域名
10.https在使用上一些场景,或者说一些个需求:
1.指定某些url走https,其他都是http协议?
2.所有资源都走https,某一个或某两个url不走https?
11.https配置上优化相关一些个参数?  session_cache   session_timeout
16.Nginx HTTPS实践的更多相关文章
- 17、Nginx HTTPS 实践
		
1.HTTPS安全证书基本概述 为什么需要使用HTTPS, 因为HTTP不安全.当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡 ...
 - Https实践
		
https实践 常用端口 ssh 22 telnet 23 ftp 21 rsync 873 http 80 mysql 3306 redis 6379 https 443 dns 53 php 90 ...
 - linux:Nginx+https双向验证(数字安全证书)
		
本文由邓亚运提供 Nginx+https双向验证 说明: 要想实现nginx的https,nginx必须启用http_ssl模块:在编译时加上--with-http_ssl_module参数就ok.另 ...
 - 【百度】大型网站的HTTPS实践(二)——HTTPS加密算法介绍
		
大型网站的HTTPS实践(二)——HTTPS加密算法介绍 原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:09:43 358 0 前言 在上一篇文章中,我们简要 ...
 - Nginx httpS server配置
		
Nginx httpS 配置 配置同时支持http和httpS协议: server { listen ; #backlog:每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包 ...
 - 使用Docker快速部署ELK分析Nginx日志实践(二)
		
Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...
 - 使用Docker快速部署ELK分析Nginx日志实践
		
原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...
 - 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务
		
昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Ngi ...
 - 在阿里云 ECS 搭建 nginx https nodejs 环境(三、nodejs)
		
在阿里云 ECS 搭建 nginx https nodejs 环境(三.nodejs) 在阿里云 ECS 搭建 nginx https nodejs 环境(三.nodejs) 第一步 指定版本源 执行 ...
 
随机推荐
- 控制执行流程之break和continue
			
1.在任何迭代语句的主体部分,都可以用break和continue来控制程序执行流程. 2.注意: break:用于强行退出循环, 不执行循环中剩余的语句:continue:停止当前的循环,执行下一次 ...
 - java架构之路-(spring源码篇)由浅入深-spring实战详细使用
			
今天我更新了一篇jvm垃圾回收的算法和垃圾回收器的内部逻辑,但是看的人不多啊......貌似大家还是比较喜欢看源码吧,毕竟实战要比理论用的多. 这篇文章不会详细的深入底层源码,只是基于注解和配置来说说 ...
 - 第一次接触WebSocket遇到的坑以及感受
			
要求用.net写一个服务,然后通过webscoket实现客户端与服务端之间的通信. 第一次知道.net还可以用来写服务,然后问题来了,服务是什么- -..下面图里的就是服务,可以停止暂停和启动. 我要 ...
 - Mysql学习笔记整理之选用B+tree结构
			
为什么mysql不使用平衡二叉树? 数据处的深度决定着他的IO操作次数,IO操作耗时大 每一个磁盘块保存的数据量太小 B+Tree和B-Tree的区别? B+树几点关键字搜索采用闭合区间 B+树非叶节 ...
 - 小程序开发初体验,从静态demo到接入Bmob数据库完全实现
			
之前我胖汾公司年会.问我能不能帮忙搞个小程序方便他们进行游戏后的惩罚/抽奖使用.出了个简单的设计图.大概三天左右做了个简单的小程序.目前提交审核了.对于写过一小段时间vue来说小程序很容易上手.写法和 ...
 - koa和exprsss区别
			
koa和exprsss区别 koa没有内置中间件 express有几个内置的中间件,如express.static()//加载静态资源 koa不再有req,res请求,它是封装在context里面 c ...
 - MonkeyRunner学习笔记(1)
			
MonkeyRunner是java编程语言实现的Python写出来的一个API调用工具 MonkeyRunner有三个类:MonkeyRunner,MonkeyDevice,MonkeyImage M ...
 - idea 自动生成并跳转单元测试
			
在要测试的类上按快捷键ctrl + shift + t,选择Create New Test,在出现的对话框的下面member内勾选要测试的方法,点击ok 或者点击菜单栏Navigate–>tes ...
 - Akka实现WordCount(Scala)
			
Akka实现WordCount(Scala): 架构图: 项目结构: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0 ...
 - MongoDB 学习笔记之 索引
			
索引: db.media.createIndex({"Tracklist": 1}) 1表示升序 -1表示降序 我们要着重看一下对数组创建索引的情况. 构建一个集合:db.medi ...