全站https
https的数据加密过程,也会导致请求响应速度慢很多,数据都要加密,解密。因此内网可以不做https,外网入口slb做https即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| client , 访问 http://www.linux0224.cn > https://www.linux0224.cn ↓
slb (ssl + nginx【http】) http://www.linux0224.cn > https://www.linux0224.cn
证书这里一份 ↓
证书再来一份
http://www.linux0224.cn > https://www.linux0224.cn web7 web8( 【ssl】 + nginx[http] + php-fpm )
|
lb-5机器(这里负载均衡,加上upstream配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| 准备好slb+ssl
私钥文件 /etc/nginx/ssl-cert/server.key 公钥文件,证书文件 /etc/nginx/ssl-cert/server.crt
创建nginx配置文件
vim /etc/nginx/conf.d/ssl.conf
server { listen 80; server_name www.linux0224.cn; rewrite ^(.*) https://$server_name$1 redirect; }
# 从80 > 443
upstream myweb { # 反正这是后端内网的节点,用户也不可见 server 172.16.1.7:443; server 172.16.1.8:443; } server{ listen 443 ssl; server_name www.linux0224.cn; ssl_certificate /etc/nginx/ssl-cert/server.crt; ssl_certificate_key /etc/nginx/ssl-cert/server.key ;
location / { proxy_pass https://myweb; # 加上代理转发参数 include proxy_params; } }
# 创建好转发参数 vim /etc/nginx/proxy_params
proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;
# 这个配置能看懂扣 6,看不懂7
[root@lb-5 /etc/nginx/ssl-cert]#netstat -tunlp |grep '443|80' -E tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2155/nginx: master tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 2155/nginx: master
|
web7 ,web8
两台机器一起操作即可。
ssl.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 1. 拷贝证书文件,用同一份证书 mkdir -p /etc/nginx/ssl-cert/ scp root@172.16.1.5:/etc/nginx/ssl-cert/* /etc/nginx/ssl-cert/
这2个步骤,看懂扣 3,不懂4
2. 配置文件
vim /etc/nginx/conf.d/ssl.conf server{ listen 443 ssl; server_name www.linux0224.cn; ssl_certificate /etc/nginx/ssl-cert/server.crt; ssl_certificate_key /etc/nginx/ssl-cert/server.key ; location / { root /www; index index.html; } }
3.创建测试数据的页面 mkdir /www #echo 'i am web 8 ++++++++++++++' > /www/index.html #echo 'i am web7~~~~~~~~~~~~' > /www/index.html
|
测试访问,客户端做好dns解析
1 2 3 4 5 6
| 10.0.0.5 www.linux0224.cn
http://www.linux0224.cn/
|
综合,难度加大的玩法(slb支持https,后端依然是http就行)
1 2 3 4 5
| 最常见的,入口和外网的数据通信,确保安全,用https 内网的转发,无须设置https。
部署后端应用服务器,接收https请求的时候,得加上一些设置。
|
以wordpress为练习入手。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| client ↓ http://wordpress.linux0224.cc 自动302跳转 https://wordpress.linux0224.cc ↓
slb-5 (nginx配置) 负载均衡, 转发给后端
↓ web组 7和8 nginx + php-fpm的代理转发。
这个流程,能清晰看懂,理解的 扣 3,不理解扣 4
|
先部署lb-5机器
1 2 3 4 5 6 7
| 我又差点踩坑了。。。。
wordpress安装后,数据写到数据库了, 你昨天是以wordpress.linux0224.cc安装的
最终这个博客产品,写入的url都是这个域名 wordpress.linux0224.cc 因此,你还得用这个域名,不能乱改。。
|
lb-5机器的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| [root@lb-5 ~]#cat /etc/nginx/conf.d/wordpress.conf # 这里定义后端的入口是 ip:33333 # 因此你后端的节点,nginx入口得是 listen 33333; # 到这里都OK的扣 6,看不懂7
upstream wordpress_pools { server 172.16.1.7:33333; server 172.16.1.8:33333; }
# 80虚拟主机,目的是为了匹配http请求的80端口,强制转发给https的443端口 # 1 . 目的是接收 http://wordpress.yuchaoit.cc; server { listen 80; server_name wordpress.linux0224.cc; rewrite ^(.*) https://$server_name$1 redirect; }
# 2. https虚拟主机的设置
server {
listen 443 ssl; server_name wordpress.linux0224.cc; # 指定证书的地址 ssl_certificate /etc/nginx/ssl-cert/server.crt; ssl_certificate_key /etc/nginx/ssl-cert/server.key; # 反向代理,这里就基于http协议的转发,给后端机器组即可。 # 用的是proxy_pass location / { proxy_pass http://wordpress_pools; include proxy_params; } }
# 重新启动nginx nginx -s reload
|
部署wordpress后端机器组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| nginx 去接收转发而来的请求,然后再通过fastcgi_pass 127.0.0.1:9000 并且转发的时候,添加让http数据,转为fastcgi_pass可认识的变量数据
这个流程记得扣 1,不记得 2 在部署了https之后
slb-5接收到 https的请求后,再转发给后端,需要后端框架支持。 # 让fastcgi协议,也认识https
写入到web7 和web8的nginx目录下 cat fastcgi_params fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
# enable https # 因为,入口是https请求,转发到后端,url依然是https://wordpress.linux0224.cc,比如你来看 # 因此在这里要打开这个参数,记住就行,。
fastcgi_param HTTPS on;
生成nginx的配置文件
# 看懂扣 3,不懂 4 server { listen 33333; # 因为slb的upstream里面写的就是33333 # 注意这个域名要和slb对上 server_name wordpress.linux0224.cc; root /mysite/wordpress/; index index.php index.html;
location ~ \.php$ { root /mysite/wordpress/; # 发给fastcgi去执行php的wordpress源代码程序 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
}
# 到这里,能清晰看懂的,扣 6,不懂7
# 见证奇迹的时候到了,。是正确访问?还是又是踩坑?这是一个迷。。。 # 看看数据库里写入的url域名是什么。
#启动是lb和 web组
你自建的证书,没有绑定域名
阿里云上的证书,绑定域名是通过了一个 txt类型的dns记录,做的绑定解析,限制你必须用单个的域名。
|
踩坑解释记录(数据库)
客户端测试
1
| 10.0.0.5 wordpress.linux0224.cc
|
如果负载均衡有问题,你可以先试试,单个的节点是否正常。
1
| 10.0.0.7 wordpress.linux0224.cc
|
确保你的网站是正确的(看日志)
通过检测,日志,明确请求负载均衡到了 web7 web8 默认是轮训一人一次
确保你的wordpress后台管理也是对的,以及发表文章都是对的
这个问题,还是数据库中写入了端口的问题。
之前部署,
1 2 3 4 5 6 7 8 9 10 11 12
| slb upstrem { server ip:80; server ip:80; }
web7 web8
告诉你这个思路,如何别踩这个坑。
1. 你的wordpress实验,
|