码迷,mamicode.com
首页 > 其他好文 > 详细

6月13日

时间:2018-06-13 11:37:59      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:linux

12.17 Nginx负载均衡

  Nginx负载均衡

(当我们的代理服务器后面是很多web服务器的时候,那么就需要负载均衡)

演示对象:qq.com

查看www.qq.com 域名的解析ip

dig www.qq.com (dig可以查看到其域名对应的所有ip。而ping只能看到一个)

1. 查找www.qq.com域名对应IP做测试

yum install -y bind-utils     //安装dig命令包

dig www.qq.com

技术分享图片 

2.创建一个负载均衡配置文件

cd /usr/local/nginx/conf/vhost

vim ld.conf  

添加以下配置:

upstream qq_com    //upstream来指定多个web server

{

    ip_hash;   //这里下面可以定义多个Ip; 这里设置是能让用户始终访问在一台服务器ip_hash为负载均衡的算法,表示根据IP地址请求分到不同 的服务器上。

    server 180.163.26.39:80;

    server 125.39.240.113:80;

}

server

{

    listen 80;

    server_name www.qq.com;    //servername后面能跟ip

    location /

    {

        proxy_pass      http://qq_com;    //这里的名字要和upstream 处定义的一致

        proxy_set_header Host   $host;

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

最配置如下图:

技术分享图片 

3.测试语法及重新加载配置

 /usr/local/nginx/sbin/nginx -t

 /usr/local/nginx/sbin/nginx -s reload

4.curl测试

curl -x127.0.0.1:80 www.qq.com

技术分享图片 

此时我们就可以访问到www.qq.com首页的源码内容

5.Nginx 不支持代理https  

技术分享图片 

这里server处不能写ip:43端口


12.18 ssl原理

ssl原理

HTTPS它是一种加密的HTTPS协议,如果HTTPS通信的数据包在传输过程中被截获,我们可以破译这些数据包里面的信息,这里面不乏一些用户名、密码、手机号等敏感的信息,而如果使用HTTPS通信,即使数据包被截获,我们也无法破译里面的内容。使用https 通信时,我们在访问web服务器时,返回的数据包进行加密,从而保证数据安全。

技术分享图片 

SSL就是那个服务器的证书,就是访问流程第二步服务器的公钥和私钥)

解读SSL的工作流程

 浏览器发送一个https的请求给服务器;

 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;

 服务器会把公钥传输给客户端;

 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;

 客户端把加密后的随机字符串传输给服务器;

 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);

 服务器把加密后的数据传输给客户端;

 客户端收到数据后,再用自己的私钥(也就是那个随机字符串)解密;


12.19 生成ssl密钥对

生成ssl密钥对(这个自定义的ssl密钥对只能在本机上使用,不能用作在生产环境中)

1. 公钥私钥放到指定目录下:

cd /usr/local/nginx/conf/

技术分享图片 

2.生成私钥,key文件为私钥(2048是加密字符串长度)

rpm -qf `which openssl` //查询缺少的openssl包,安装命令yum install -y openssl安装

  需要先安装openssl工具,不知道包名的话,使用命令查看:rpm -qf  `which openssl  `

技术分享图片 

openssl genrsa -des3 -out tmp.key 2048 //生成私钥,key文件为私钥,2048为加密字符串长度,生成过程中要设置密码密码输入不能太短,否则不成功

技术分享图片 

3.转换key,取消密码(-in指定哪个密钥,-out输出)因为设置了密码太麻烦,所以要转换key,取消密码:

openssl rsa -in tmp.key -out aminglinux.key 

 //这一步是把刚刚生成的tmp.key再转换成aminglinux.key,目的是删除刚才设置的密码,如果key文件有密码,就必须在Nginx加载它的时候输入它的密码,因此很不方便

技术分享图片 

(此时生成的aminglinux.keytmp.key是同样的,aminglinux.key无密码而已)

技术分享图片 

4.删除有密码的tmp.key

rm -f tmp.key

5.生成证书请求文件 aminglinux.csr

openssl req -new -key aminglinux.key -out aminglinux.csr  //需要拿这个文件和私钥一起生产公钥文件

技术分享图片 

备注:因为是颁发给自己的证书所以信息可以随便填一下,但是购买的ssl证书,则这个内容需要按购买方案的写入)

6.生成公钥文件aminglinux.crt,用刚才的证书请求文件和之前的私钥文件一起

openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt

 //这里的aminglinux.crt为公钥days365是证书的日期是一年

技术分享图片 

 

12.20 Nginx配置ssl

Nginx配置ssl

1. 生成一个新的ssl配置文件

vim /usr/local/nginx/conf/vhost/ssl.conf

增加如下内容:

server {     listen 443;     server_name aming.com;     index index.html index.php;     root /data/wwwroot/aming.com;     ssl on;   //开启ssl,支持https     ssl_certificate aminglinux.crt;   //指定公钥     ssl_certificate_key aminglinux.key;    //指定私钥     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  //定义三个协议 }

最终配置如下:

技术分享图片 

2.创建aming.com目录,添加测试文件

mkdir /data/wwwroot/aming.com

cd  /data/wwwroot/aming.com

vim index.html 增加如下内容: This is ssl.

3. 测试语法

/usr/local/nginx/sbin/nginx -t  

报错,如图:

技术分享图片 

原因:当初编译的时候没有指定支持ssl,所以需要重新编译nginx,加上–with-http_ssl_module -t && -s reload

解决方法:

指定到Nginx的源码包中,重新编译:./configure --prefix=/usr/local/nginx --with-http_ssl_module,操作如下:

cd /usr/local/src/nginx-1.12.1

 ./configure --help | grep -i ssl

技术分享图片 

./configure --prefix=/usr/local/nginx --with-http_ssl_module

echo $?

make

make install

 /usr/local/nginx/sbin/nginx -V //现在就多了http_ssl_module这个参数 ,完成后再测试语法OK

技术分享图片 

3.1再次检查配置文件是否有误,重新加载配置:

 /usr/local/nginx/sbin/nginx -t

技术分享图片 

 /usr/local/nginx/sbin/nginx -s reload

4.重启nginx服务:

/etc/init.d/nginx restart

看监听端口是否多了一个443

netstat -lntp

技术分享图片 

5.编辑本地hosts文件

vi /etc/hosts

增加一条记录:127.0.0.1 aming.com

6.使用curl测试

curl https://aming.com/

技术分享图片 

这个时候提示我们的ssl不被信任,但是其实测试已成功。因为我们的ssl证书是自己写的,不合法被服务器web识别。

7.window浏览器测试:

hosts文件中增添访问指向域名:c:\windows\system32\drivers\etc

技术分享图片 

 

技术分享图片 

如果访问不到-->查看防火墙(iptables -nvL)有规则的话,

 方法一:清空规则:iptable -F

 方法二:添加443端口规则

(沃通可以买到合法的ssl证书)



6月13日

标签:linux

原文地址:http://blog.51cto.com/404006045/2128685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!