十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl
12.17 Nginx负载均衡
负载均衡和代理有点类似,代理一个叫代理,代理多个就可以叫负载均衡了。
配置这个负载均衡用到了一个upstream模块,这里我们使用qq.com为例,ip——hash下面指定的是解析到的ip。
查看域名解析到的ip可以使用dig加域名。如,如果没有安装就安装一下
然后我们就按照上图开始配置,
upstream qq_com
{
ip_hash;
server 61.135.157.156:80;
server 125.39.240.113:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
的作用是让同一个用户始终保持在同一台服务器上,(如果不保持在同一台服务器上,用账户登录了网站但是刷新一下可能就显示没有登录了)
定义两个server,格式是ip:端口,如果是80端口那么后面的80就可以省略。
定义监听端口,定义域名
指定代理的ip,我们这里直接指定upstream的名字就行,然后保存退出。
然后我们可以来测试一下。
正常情况下你用本机访问www.qq.com会访问到默认虚拟主机
然后我们-t检查错误然后重新加载,之后再访问就不是默认虚拟主机了,而是真正的qq主页。
Nginx不支持代理https,只支持http,据说新版本支持tcp
12.18 ssl原理
https和http的区别是通信是加密的,如果不加密就有可能被从中间截掉,泄露数据,而加密了的即使被人截到也是看不了内容的。
实现加密解密的流程:
分别是私钥和公钥,私钥是用来解密的,公钥是用来加密的。
12.19 生成ssl**对
openssl genrsa -des3 -out tmp.key 2048//key文件为私钥
openssl rsa -in tmp.key -out aminglinux.key //转换key,取消密码
rm -f tmp.key
openssl req -new -key aminglinux.key -out aminglinux.csr//生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件
openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt
了解了ssl流程之后我们可以尝试自己来做一个证书,就是公钥和私钥。
首先我们需要一个工具openssl,如果没有就需要装一个如下的包,
1.首先移动到改目录下
2.然后生成一个rsa形式的名字叫tmp.key的私钥,2048长度
然后输入它的密码,密码是必要的,然后重复输入一次。
3.因为密码比较麻烦,你不可能每次登网页都输入密码,所以我们要把它去掉,所以第三步就是转换key,取消密码
-in指定哪一个**要被转换,-out指定它输出的。
然后输入tmp.key的密码,现在tmp.key和aminglinux.key是一个私钥,只不过前面有密码,后面的这个没有密码,然后我们就可以把tmp.key删掉啦。
4.然后我们还需要生成一个请求的文件,是为了让这个请求的文件和私钥生成一个公钥。
请求文件需要包含一些东西如下图,我们随便写一写吧(因为这是我们自己给自己做的证书)。也可以不写直接回车。但是如果是正式的证书就需要填对。
倒数第二步是填写密码。
5.然后我们用和
生成公钥,
365是证书的日期是一年。
然后我们就就可以配置nginx的ssl了。crt是公钥,key是私钥。
12.20 Nginx配置ssl
server
{
listen 443;
server_name aming.com;
index index.html index.php;
root /data/wwwroot/aming.com;
ssl on;
ssl_certificate aminglinux.crt;
ssl_certificate_key aminglinux.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
我们来创建一个新的虚拟主机配置文件,然后加上如上代码。
root一行的路径需要创建一下。
表示开启ssl,支持https
指定公钥,指定私钥。
然后我们保存检查错误,重新加载,来测试一下,
这里检查错误的时候报错了
(原因是我们最早编译nginx的时候并没有指定它支持ssl,)
所以我们给它重新编译一下。
搜索一下,
这里我们需要加上下图选中的配置
然后make和make install,完成之后如下图,多了一个
然后在-t,在重新启动nginx就可以了。
然后我们查看一下它的监听端口,可以发现多了一个443
然后我们到下创建一个index.html的测试文件,然后在里面输入
然后我们来测试一下
直接用会400,所以我们需要绑定一下hosts
然后我们不用-x指定直接这样访问,然后它会提示我们这证书不合法,因为我们这个是自己颁发的,但是实际上我们已经配置成功了。
我们也可以用Windows浏览器访问一下,不过我们也需要绑定一下Windows的host。如下(具体ip以本机为准)
然后在浏览器里访问如下地址
如果访问不了就要看看有没有防火墙了,
有的话就用简单点的方法关掉,如果不想全部清空你需要加一个443端口的规则。
然后我们再来访问刚刚的网址如下图会提示警告,我们点高级继续访问即可。