动静分离
$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:
DNS劫持原理图
模拟DNS劫持
实验前提:我们本来要通过dns解析之后,直接访问源站的,我们手动在hosts文件中把通往源站的ip改为被劫持到其他站的ip(类似于DNS劫持),通过这个站(类似于代理站)去访问源站然后源站返回资源给代理站,代理站替换数据(加广告),然后返回给用户。
用户访问一个网站,然后被dns劫持后,引到其他的服务器(类似于负载均衡)
(1)web01上的配置(相当于源站)
(2)七层负载均衡的配置(相当于被劫持到的站点)
用户访问一个网站,然后被dns劫持后,引到其他的服务器(类似于负载均衡),
这个服务器
sub_filter '' '';
解决DNS劫持:
如何解决dns劫持:在hosts中绑定dns解析,就不会被篡改了 (并不是源站被篡改了)
代码没有被串改,只是把数据回传给用户的时候,把内容给替换了
加上https就不会被篡改,因为代理服务器没有办法
通过CA去验证证书,没有办法获取公钥,windows可以
验证,因为有根证书机构,会查CA,有专门存放证书的
位置,安卓手机也有,每一年更新一次
颁发证书的过程:
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
#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权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
生成证书
openssl genrsa -idea -out server.key 2048
(3)生成自签证书,同时去掉私钥的密码
openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
(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;
}
实现原理:
(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
在登录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;
}
}
公网单台服务器配置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;
}
ssl发展史
ca证书机构如何颁发证书。怎么配置证书,浏览器怎么验证证书。
配置https证书,nginx+web集群配置https php fastcgi_param HTTPS on;
阿里云配置单台 阿里云配置SLB
实现全站https (30-40分钟)
nginx+多台web+nfs+mysql+redis+https
wordpress
zh
phpmyadmin