五十、Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

五十、Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl

一、Nginx负载均衡

代理一台机器叫代理,代理两台机器就可以叫负载均衡。

代理服务器后有多个web服务器提供服务的时候,就可以实现负载均衡的功能。

dig命令:解析域名的IP。常用的域名查询工具,可以用来测试域名系统工作是否正常,可以反馈多个IP。

需要安装这个包:# yum install -y bind-utils

# dig qq.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> qq.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15958

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;qq.com. IN A

;; ANSWER SECTION:

qq.com. 176 IN A 14.17.32.211

;; Query time: 26 msec

;; SERVER: 119.29.29.29#53(119.29.29.29)

;; WHEN: 六 4月 28 02:32:44 CST 2018

;; MSG SIZE  rcvd: 51

# ping qq.com

PING qq.com (14.17.32.211) 56(84) bytes of data.

# cd /usr/local/nginx/conf/vhost/

[[email protected] vhost]# vim load.conf

upstream qq_com  //这个名字可以自定义,这个名字代表着下面的两歌IP。

{

ip_hash;       //目的是使同一个用户的访问始终保持在一个机器上

server 61.135.157.156:80;   当端口是80时此处的:80可以省略

server 125.39.240.113:80;

}

server

{

listen 80;                                  定义监听端口

server_name www.qq.com;    定义域名

location /

{

proxy_pass      http://qq;   做代理时是指定它的IP,此处不能写IP就只能写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;

}

}

测试:

# curl -x127.0.0.1:80 www.qq.com  正常情况下,会访问默认虚拟主机。

This is the defaule site.

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

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

# curl -x127.0.0.1:80 www.qq.com  再次访问时,访问的就是qq的主页。

反馈回来的是网页的源码。

知识点:

Nginx不支持代理https,就是server 125.39.240.113:80冒号后面不能写443,只能代理httpd,新版本能代理tcp。

如果一定要代理https,访问web服务器的80端口,但不支持443。

web服务器提供https服务,只能是后端访问的时候是80,代理服务器可以监听443,Nginx访问后端服务器的时候,访问它的80端口,但是不支持访问它的443。

二、SSL原理

https的通信是加密的,如果中间被黑客截取,黑客获取到的数据包是不能解密的,看到的是乱码。

HTTPS:一种加密的HTTP协议,HTTP通信的数据包传输过程中被截获,可以破译数据包里面的信息;而使用HTTPS通信,即使被截获,也无法破译里面的内容。

SSL工作流程:

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

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

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

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

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

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

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

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

三、生成SSL密钥对

# cd /usr/local/nginx/conf

# rpm -qf `which openssl` 查要这个openssl的包的名字,默认应该安装了

openssl-1.0.2k-8.el7.x86_64

# openssl genrsa -des3 -out tmp.key 2048

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文件为私钥。

//genrsa:生成rsa形式的私钥;2048:长度;名字是tmp.key。

# openssl rsa -in tmp.key -out mrx.key

Enter pass phrase for tmp.key:

writing RSA key

//转换key,取消密码 。

//-in:指定要被转换的密钥,-out:指定要输出的密钥。

//此时tmp.key和mrx.key实际上是一样的,只是tmp.key有密码,mrx.key没密码

# rm -f tmp.key          //然后删除有密码的。

# openssl req -new -key mrx.key -out mrx.csr(请求文件)

//生成证书请求文件,需要拿这个文件和私钥一起生成公钥文件

Country Name (2 letter code) [XX]:11

State or Province Name (full name) []:changsha

Locality Name (eg, city) [Default City]:changsha

Organization Name (eg, company) [Default Company Ltd]:MRX

Organizational Unit Name (eg, section) []:MRX

Common Name (eg, your name or your server's hostname) []:MRX111

Email Address []:[email protected]

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:12345

An optional company name []:MRX

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

//这里的mrx.crt为公钥

Signature ok

subject=/C=11/ST=changsha/L=changsha/O=MRX/OU=MRX/CN=MRX111/[email protected]

Getting Private key

//这样最终才生成了CRT证书文件。

四、Nginx配置SSL

# cd /usr/local/nginx/conf/vhost/

[[email protected] vhost]# vim ssl.conf

server

{

listen 443;

server_name mrx.com;

index index.html index.php;

root /data/wwwroot/mrx.com;

ssl on;          //开启ssl,支持https。

ssl_certificate mrx.crt;      //指定公钥

ssl_certificate_key mrx.key;     //指定私钥

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    //协议,一般三种都配置上

}

# mkdir /data/wwwroot/mrx.com

# /usr/local/nginx/sbin/nginx -t  //报错,不知道ssl的配置,因为之前编译Nginx时没有指定支持ssl

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7

nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

# cd /usr/local/src/nginx-1.8.0/

# ./configure --help|grep -i ssl

--with-http_ssl_module             enable ngx_http_ssl_module   //需要加上标红的这个参数

--with-mail_ssl_module             enable ngx_mail_ssl_module

--with-openssl=DIR                 set path to OpenSSL library sources

--with-openssl-opt=OPTIONS         set additional build options for OpenSSL

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

# make && make install

# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.8.0

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)

built with OpenSSL 1.0.2k-fips  26 Jan 2017

TLS SNI support enabled

configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module

[[email protected] nginx-1.8.0]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# /etc/init.d/nginx restart

Restarting nginx (via systemctl):                          [  确定  ]

# netstat -lntp

Active 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      3952/nginx: master

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      946/sshd

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1301/master

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      3952/nginx: master

tcp6       0      0 :::22                   :::*                    LISTEN      946/sshd

tcp6       0      0 ::1:25                  :::*                    LISTEN      1301/master

tcp6       0      0 :::3306                 :::*                    LISTEN      1261/mysqld

多了一个443。

# cd /data/wwwroot/mrx.com/

# vim index.html   //做一个测试文件

This is ssl.

# curl -x 127.0.0.1:443 https://mrx.com

curl: (56) Received HTTP code 400 from proxy after CONNECT

# vim /etc/hosts

127.0.0.1  mrx.com

# curl  https://mrx.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.html下面还有内容没有贴出来。

编辑Windows中c盘的hosts文件,加上192.168.93.130 mrx.com

再浏览器访问https://mrx.com,如果访问不到,查看有无防火墙。

有的话,简单的方法是直接iptables -F,不想清空就加一条443端口的规则,再次浏览器访问,就会弹出来不安全,还想继续访问,就点高级,继续前往。

证书不被信任的时候就会报不安全。

沃通:购买SSL证书的网站。

原文地址:http://blog.51cto.com/13576245/2108695

时间: 2024-08-07 04:20:53

五十、Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL的相关文章

Nginx负载均衡项目部署流程(一个Nginx&amp;两个tomcat项目)

1.Nginx安装  (试验环境为Windows环境下的1.16.1版本) (下载地址:http://nginx.org/en/download.html) 2.Nginx配置文件修改 在http{}下修改如下: upstream myServer{ server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; } server { listen 81; location / { proxy_pass http://myServe

KVM虚拟化搭建nginx负载均衡 和lamp 架构(三 nginx负载均衡)

nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的. 依赖包及工具 yum install -y wget gcc pcre-devel zlib-devel zlib nginx下载地址  http://nginx.org/en/download.html 第一步 安装nginx 下载 # cd /usr/local/src/ # wget http://nginx.org/download/nginx-1.10.0.tar.gz 解压 # tar

【转】浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. 阅读本文需要读者已有一定的计算机知识,了解TCP.DNS等. 2.分析 众所周知,打开一个网页的过程中,浏览器会因页面上的css/js/image等静态资源会多次发起连接请求,所以我们暂且把这个网页加载过程分成两部分: html(jsp/php/aspx) 页面加载(假设存在简单的Nginx负载均

浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. 阅读本文需要读者已有一定的计算机知识,了解TCP.DNS等. 2.分析 众所周知,打开一个网页的过程中,浏览器会因页面上的css/js/image等静态资源会多次发起连接请求,所以我们暂且把这个网页加载过程分成两部分: html(jsp/php/aspx) 页面加载(假设存在简单的Nginx负载均

企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件. Keepalived软件主要是通过VRRP协议实现高可用功能的.VRRP是Virtual Router Redundancy Pro

【转贴】Linux系统NGINX负载均衡404错误处理方法

NGINX负载均衡404错误处理方法 使用NGINX 实现负载均衡,但一组服务器的数据不是实施同步,主服务器有了数据要过段时间才同步到其他服务器 upstream   image.stream.com   { server 192.168.1.25:8088; server 192.168.1.24:8088; server 192.168.1.23:8088; } 用户访问图片的时候,就有60% 的几率显示为找不到文件. 问题: 怎么配置成以下功能: 1.连接图片服务器时,如果说浏览的机器在2

Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl

Nginx负载均衡 Nginx负载均衡即为当代理服务器将自定义的域名解析到多个指定IP时,通过upstream来保证用户可以通过代理服务器正常访问各个IP. 代理一台机器叫做代理,代理两台及两台服务器就能叫做负载均衡. 负载均衡配置 创建一个配置文件/usr/local/nginx/conf/vhost/load.con [[email protected] ~]# vim /usr/local/nginx/conf/vhost/load.conf upstream qq.com #借助upst

12.17 Nginx负载均衡 12.18 ssl原理 12.19 生成ssl密钥对 12.20 N

12.17 Nginx负载均衡 [[email protected] ~]# yum install -y bind-utils[[email protected] ~]# dig www.qq.comANSWER SECTION:www.qq.com. 73 IN A 59.37.96.63www.qq.com. 73 IN A 14.17.42.40www.qq.com. 73 IN A 14.17.32.211[[email protected] ~]# curl -x127.0.0.1:

Nginx负载均衡,ssl原理,生成ssl密钥对,Nginx配置ssl

Nginx负载均衡负载均衡就是:将本应该这台机器(或集群)要处理的请求(工作或负载),根据一定的算法,平均地分配到其他的机器(或集群)上去处理,这样可以大大减少这台机器(或集群)的工作量,防止因负载过大而造成响应超时或down机等意外情况的发生.一般大的网站和系统都使用了负载均衡!首先进入/usr/local/nginx/conf/vhost/目录下然后编辑文件 vim /usr/local/nginx/conf/vhost/load.conf然后加入下列配置upstream qq_com{ip