博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx负载均衡、配置ssl
阅读量:5928 次
发布时间:2019-06-19

本文共 7101 字,大约阅读时间需要 23 分钟。

hot3.png

12.17 Nginx负载均衡

Nginx负载均衡即为当代理服务器将自定义的域名解析到多个指定IP时,通过upstream来保证用户可以通过代理服务器正常访问各个IP。

负载均衡配置

配置参数:

[root@1 ~]# vim /usr/local/nginx/conf/vhost/load.confupstream aq.com#自定义域名{    ip_hash;    #保证同一个用户始终保持在同一台机器上    #即当域名指向多个IP时,保证每个用户始终解析到同一IP    server 61.135.157.156:80;    server 125.39.240.113:80;    #指定web服务器的IP}server{    listen 80;    server_name www.qq.com;    location /    {        proxy_pass      http://aq.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;    }}

检测

代理前

[root@1 ~]# curl -x127.0.0.1:80 www.qq.com This is the default directory.

使用代理前,会直接解析到默认虚拟主机。

代理后

[root@1 ~]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@1 ~]# /usr/local/nginx/sbin/nginx -s reload[root@1 ~]# curl -x127.0.0.1:80 www.qq.com

使用代理后会解析到代理服务器所指向的IP

[root@1 ~]# dig www.qq.com;; ANSWER SECTION:www.qq.com.		138	IN	A	61.135.157.156www.qq.com.		138	IN	A	125.39.240.113;; Query time: 13 msec;; SERVER: 119.29.29.29#53(119.29.29.29);; WHEN: 二 8月 15 16:41:11 CST 2017;; MSG SIZE  rcvd: 71

注意: Nginx不支持代理https,只能代理http,新版本的Nginx可以代理tcp。

dig命令

dig命令是常用域名解析工具。

如果服务器中没有该命令,手动安装:

[root@1 ~]# yum install -y bind-utils

语法: dig [域名]

http、https、tcp

HTTP超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全。
HTTP默认的端口号为80,HTTPS的端口号为443。
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。默认监听80端口。

12.18 SSL原理

SSL(Secure Sockets Layer 安荃套接层)协议,及其继任者TLS(Transport Layer Security传输层安全)协议,是为网络通信提供安全及数据完整性的一种安全协议。

SSL工作流程

如果虚拟机中没有此工具,手动安装:

[root@1 ~]# yum install -y openssl

SSL工作流程

220651_l2F3_3706800.png

  • 浏览器发送一个https的请求给服务器;
  • 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
  • 服务器会把公钥传输给客户端;
  • 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
  • 客户端把加密后的随机字符串传输给服务器;
  • 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
  • 服务器把加密后的数据传输给客户端;
  • 客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

12.19 生成SSL密钥对

SSL证书就是一对公钥和私钥。

创建私钥

[root@1 ~]# cd /usr/local/nginx/conf/[root@1 conf]# openssl genrsa -des3 -out tmp.key 2048#生成SSL密钥Generating RSA private key, 2048 bit long modulus....................................................................................+++...............................................................+++e is 65537 (0x10001)Enter pass phrase for tmp.key:Verifying - Enter pass phrase for tmp.key:

说明: 在此指定密码!

转换key,取消密码:

[root@1 conf]# openssl rsa -in tmp.key -out adailinux.key Enter pass phrase for tmp.key:writing RSA key

删除密钥文件:

[root@1 conf]# rm -f tmp.key

生成证书请求文件

需要拿这个文件和私钥一起生产公钥文件:

[root@1 conf]# openssl req -new -key adailinux.key -out adailinux.csrYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:adaiLocality Name (eg, city) [Default City]:BeijingOrganization Name (eg, company) [Default Company Ltd]:BeijingOrganizational Unit Name (eg, section) []:BeijingCommon Name (eg, your name or your server's hostname) []:adailinuxEmail Address []:adai@adailinux.comPlease enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:123456An optional company name []:123456

说明: 该部分内容如果不购买证书可以自定义;如果是正式应用在网站上,需要规范填写对应信息(购买)。

创建公钥:

[root@1 conf]# openssl x509 -req -days 365 -in adailinux.csr -signkey adailinux.key -out adailinux.crtSignature oksubject=/C=CN/ST=adai/L=Beijing/O=Beijing/OU=Beijing/CN=adailinux/emailAddress=adai@adailinux.comGetting Private key

12.20 Nginx配置SSL

[root@1 conf]# cd vhost/[root@1 vhost]# vim ssl.confserver{    listen 443;    server_name adai.com;    index index.html index.php;    root /data/wwwroot/adai.com;    ssl on;    #开启ssl    ssl_certificate adailinux.crt;    #配置公钥    ssl_certificate_key adailinux.key;    #配置私钥    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #配置协议}[root@1 vhost]# mkdir /data/wwwroot/adai.com

检测

报错:

[root@1 conf]# /usr/local/nginx/sbin/nginx -tnginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

未识别ssl配置,需要重新编译Nginx:

[root@1 conf]# cd /usr/local/src/nginx-1.12.1/[root@1 nginx-1.12.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module  [root@1 conf]# make[root@1 conf]# make install[root@1 nginx-1.12.1]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@1 nginx-1.12.1]# /etc/init.d/nginx restartRestarting nginx (via systemctl):                          [  确定  ][root@1 nginx-1.12.1]# netstat -lntpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5991/nginx: master  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1735/sshd           tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2040/master         tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      5991/nginx: master  tcp6       0      0 :::3306                 :::*                    LISTEN      1990/mysqld         tcp6       0      0 :::22                   :::*                    LISTEN      1735/sshd           tcp6       0      0 ::1:25                  :::*                    LISTEN      2040/master

nginx监听80和443端口。

测试

[root@1 nginx-1.12.1]# cd /data/wwwroot/adai.com/[root@1 1.com]# vim index.htmlThis is ssl.

添加本地域名:

[root@1 adai.com]# vim /etc/hosts127.0.0.1  adai.com[root@1 vhost]# curl https://adai.com/curl: (60) Peer's certificate issuer has been marked as not trusted by the user.More details here: http://curl.haxx.se/docs/sslcerts.htmlcurl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option.If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL).If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.

因为该证书是自己创建的,所以提示证书不被信任!!!

注: 进行该测试之前需要更改Windows的hosts文件。

转载于:https://my.oschina.net/u/3706800/blog/1802491

你可能感兴趣的文章
JS获取各种浏览器窗口大小的方法
查看>>
javascript的console.log用法
查看>>
js插入节点appendChild和insertBefore
查看>>
Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题
查看>>
数据结构常见的八大排序算法
查看>>
mac中使用vi修改二进制文件
查看>>
(转) SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程
查看>>
Tableau学习系列之Tableau的工作区简介(工作表工作区、 仪表板工作区 和故事工作区 )和基本概念...
查看>>
Linux中cp直接覆盖不提示的方法
查看>>
java 让图片变黑白
查看>>
即将上线的Kafka服务器面临的一系列填坑笔记
查看>>
HTML5动画图片播放器 高端大气
查看>>
[2014AAA]On the weak solution to a fractional nonlinear Schrödinger equation
查看>>
自主架设VOIP系统
查看>>
iOS-生成国际化包-配置App多语言支持
查看>>
Android开发之基本控件和详解四种布局方式
查看>>
[ZigBee] 10、ZigBee之睡眠定时器
查看>>
微信开发 问题汇总
查看>>
[sharepoint]Office Web Apps for SharePoint 2010
查看>>
IIS整合tomcat
查看>>