十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

12.17 Nginx负载均衡

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

负载均衡和代理有点类似,代理一个叫代理,代理多个就可以叫负载均衡了。

配置这个负载均衡用到了一个upstream模块,这里我们使用qq.com为例,ip——hash下面指定的是解析到的ip。

查看域名解析到的ip可以使用dig加域名。如十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl,如果没有安装就安装一下十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后我们就按照上图开始配置,

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

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;
    }
}

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl的作用是让同一个用户始终保持在同一台服务器上,(如果不保持在同一台服务器上,用账户登录了网站但是刷新一下可能就显示没有登录了)

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl定义两个server,格式是ip:端口,如果是80端口那么后面的80就可以省略。

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl定义监听端口,定义域名

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl指定代理的ip,我们这里直接指定upstream的名字就行,然后保存退出。

然后我们可以来测试一下。

正常情况下你用本机访问www.qq.com会访问到默认虚拟主机

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后我们-t检查错误然后重新加载,之后再访问就不是默认虚拟主机了,而是真正的qq主页。

Nginx不支持代理https,只支持http,据说新版本支持tcp

12.18 ssl原理

https和http的区别是通信是加密的,如果不加密就有可能被从中间截掉,泄露数据,而加密了的即使被人截到也是看不了内容的。

实现加密解密的流程:

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl分别是私钥和公钥,私钥是用来解密的,公钥是用来加密的。

12.19 生成ssl**对

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置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流程之后我们可以尝试自己来做一个证书,就是十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl公钥和私钥。

首先我们需要一个工具openssl,如果没有就需要装一个如下的包,

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

1.首先移动到改目录下十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

2.然后生成一个rsa形式的名字叫tmp.key的私钥,2048长度十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后输入它的密码,密码是必要的,然后重复输入一次。

3.因为密码比较麻烦,你不可能每次登网页都输入密码,所以我们要把它去掉,所以第三步就是转换key,取消密码

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl-in指定哪一个**要被转换,-out指定它输出的。

然后输入tmp.key的密码,现在tmp.key和aminglinux.key是一个私钥,只不过前面有密码,后面的这个没有密码,然后我们就可以把tmp.key删掉啦。十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

4.然后我们还需要生成一个请求的文件,是为了让这个请求的文件和私钥生成一个公钥。

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

请求文件需要包含一些东西如下图,我们随便写一写吧(因为这是我们自己给自己做的证书)。也可以不写直接回车。但是如果是正式的证书就需要填对。

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

倒数第二步是填写密码。

5.然后我们用十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl生成公钥,

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

365是证书的日期是一年。

然后我们就就可以配置nginx的ssl了。crt是公钥,key是私钥。

12.20 Nginx配置ssl

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、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一行的路径需要创建一下。十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl表示开启ssl,支持https

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl指定公钥,指定私钥。

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl指定协议,一般我们三种都配置上。

然后我们保存检查错误,重新加载,来测试一下,

这里检查错误的时候报错了

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

(原因是我们最早编译nginx的时候并没有指定它支持ssl,)

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

所以我们给它重新编译一下。

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

搜索一下,

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

这里我们需要加上下图选中的配置

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后make和make install,完成之后如下图,多了一个十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后在-t,在重新启动nginx十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl就可以了。

然后我们查看一下它的监听端口,可以发现多了一个443

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后我们到十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl下创建一个index.html的测试文件,然后在里面输入十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后我们来测试一下

直接用十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl会400,所以我们需要绑定一下hosts

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后我们不用-x指定直接这样访问十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl,然后它会提示我们这证书不合法,因为我们这个是自己颁发的,但是实际上我们已经配置成功了。

我们也可以用Windows浏览器访问一下,不过我们也需要绑定一下Windows的host。如下(具体ip以本机为准)

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

然后在浏览器里访问如下地址

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

如果访问不了就要看看有没有防火墙了,

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl

有的话就用简单点的方法十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl关掉,如果不想全部清空你需要加一个443端口的规则。

然后我们再来访问刚刚的网址如下图会提示警告,我们点高级继续访问即可。

十三周一次课 2018.01.08 Nginx负载均衡、ssl原理、生成ssl**对、Nginx配置ssl