设为首页 收藏本站
查看: 875|回复: 0

[经验分享] Nginx负载均衡,ssl原理,生成ssl密钥对,Nginx配置ssl-zero菌

[复制链接]
发表于 2018-11-12 13:13:53 | 显示全部楼层 |阅读模式
  笔记内容:

  •   12.17 Nginx负载均衡
  •   12.18 ssl原理
  •   12.19 生成ssl密钥对
  •   12.20 Nginx配置ssl
  笔记日期:2017-10-24
  12.17 Nginx负载均衡

  关于负载均衡实际上和上一篇末尾讲的代理服务器的概念差不多,代理一台机器,叫做代理服务器,代理多台机器就叫做负载均衡。
  使用负载均衡是为了将多个用户的请求均匀的发送给多台web服务器,如果没有负载均衡的话,用户A访问web服务器A时,web服务器A宕机了,那么用户A的访问请求就不会被处理,而有负载均衡的话,负载均衡会把用户A的访问请求发送给其他的web服务器去进行处理。
  在配置负载均衡前先介绍一个命令:dig
  安装命令:
  yum -y install bind-utils
  dig是用来进行域名解析的,例如我解析qq.com这个域名,使用dig能够反馈更多的解析信息:

  现在我们开始配置负载均衡,新建一个虚拟主机配置文件:
  vim /usr/local/nginx/conf/vhost/ld.conf
  增加以下内容,我拿解析到qq.com的ip来当服务器做这个实验:
  upstream qq_com  //upstream是一个模块,需要使用它来定义多个IP
  {
  ip_hash;   //ip_hash是为了让同一个用户始终保持在同一个机器上
  //定义两个服务器的ip,qq.com解析出来的ip
  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;  //upstream的名称,这个名称代表着upstream里定义的ip
  proxy_set_header Host   $host;
  proxy_set_header X-Real-IP      $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  }

  编辑完之后保存退出,先不要重新加载配置文件,先测试一下用本机ip去访问www.qq.com这个域名看看结果会是什么:

  这时我们重新加载配置文件,再访问一次看看:

  可以看到能够访问到www.qq.com,并输出了这个页面的html源码,这个就是负载均衡。
  关于Nginx负载均衡方面要注意一点:
  Nginx不支持直接代理https,只能代理http,也就是说443端口不支持只支持80端口。如果非要代理https,只能是用户访问Nginx代理服务器时使用https,然后Nginx去访问后端的web服务器时使用http,属于折中的一种方式,依然不能直接代理。
  12.18 ssl原理
  https就是使用ssl加密的http,是一种加密的超文本传输协议。如果http不加密的话,被人抓包或监听了数据包,就能很轻易地看到数据包里面的数据内容,那样的话你的信息就泄露了。
  如果使用的是https协议,那么你的数据包就会被加密,即便被人抓包了,也没有那么轻易破解加密算法,因为数据包只能使用服务器上的私钥解密,而服务器根本不会在任何情况下发送私钥,想要不通过私钥来直接破解数据包几乎是不可能的。
  具体流程如图:

  12.19 生成ssl密钥对

  理解了ssl原理后,现在我们可以在虚拟机上去生成ssl密钥对,也就是自己制作证书。我们需要使用一个工具来生成密钥对,把密钥对放在nginx的conf目录下。
  进入nginx的conf目录:
  cd /usr/local/nginx/conf
  我们需要使用到的工具是openssl,如果你虚拟机没有此命令,需要自己安装,安装命令:
  yum -y install openssl
  准备完成后,第一步是生成一个私钥,命令如下:
  openssl genrsa -des3 -out tmp.key 2048    //key文件为私钥

  第二步,是把密码取消掉,如果不取消的话,会每次都要求客户端输入此密码,命令如下:
  openssl rsa -in tmp.key -out aminglinux.key   //转换key,取消密码

  实际上这时候aminglinux.key和tmp.key是同一个文件,只不过前者有密码,后者没密码。
  这时候就可以把tmp.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

  现在我们的证书就制作完成了,可以看到有这样的三个文件:

  12.20 Nginx配置ssl

  我们生成好密钥对也就是证书之后,就可以使用Nginx配置SSL了。
  先创建一个目录:
  mkdir /data/wwwroot/aming.com
  然后创建一个文件:
  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
  ssl_certificate aminglinux.crt;  //指定公钥
  ssl_certificate_key aminglinux.key;  //指定私钥
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  //定义协议
  }
  然后保存退出,测试一下配置文件:

  如图可以看到报错了,这是因为我编译Nginx的时候没有指定这个参数,所以Nginx它不知道ssl是啥没有找到这玩意。
  所以我要去重新编译一下Nginx,所以说源码包不要删除,后期增加一些配置的时候会用到:
  cd /usr/local/src/nginx-1.12.1
  ./configure --prefix=/usr/local/nginx --with-http_ssl_module
  make && make install
  重新编译安装后再测试一下配置文件,现在就没问题了:

  重启nginx :
  /etc/init.d/nginx restart
  查看监听端口可以发现监听了443端口:

  现在就可以进入一开始创建的那个目录下:
  cd /data/wwwroot/aming.com
  然后创建一个测试文件:
  vim index.html
  文件内容如下:
  This is sll test.
  往hosts里添加aming.com:

  然后使用curl访问https://aming.com/
  curl https://aming.com/

  我们可以使用windows上的浏览器看一下:
  先编辑一下hosts文件,文件路径为:
  C:\Windows\System32\drivers\etc

  然后先临时清空Linux上的防火墙规则,命令如下:
  iptables -F
  完成以上操作后,才能够使用浏览器访问:

  可以看到这个警告,但是我们可以点击“高级”里的“继续前往”即可访问:

  可以看到页面上出现了我们创建的index.html文件里的内容:

  想要没有这些警告的话,可以自己去买正规受信任的证书。我们可以访问https://www.12306.cn看看,相信这个网站大家都不陌生,访问它的https也是会有警告:

  这不是因为政府没钱买证书,而是不相信那些外部购买的证书,所以使用自己内部颁发的证书。
  因此可以知道,显示这个警告的原因仅仅是因为浏览器没有认可这个证书,并非是真的不安全。
  扩展
  针对请求的uri来代理
  http://ask.apelearn.com/question/1049
  根据访问的目录来区分后端的web
  http://ask.apelearn.com/question/920
  nginx长连接
  http://www.apelearn.com/bbs/thread-6545-1-1.html
  nginx算法分析
  http://blog.sina.com.cn/s/blog_72995dcc01016msi.html
  



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-634192-1-1.html 上篇帖子: Nginx高级应用--------性能优化,突破C100K 下篇帖子: nginx证书的设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表