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
#借助upstream模块,自定义域名
{
    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://qq.com;
        #不支持再proxy_pass中写多个ip。代理中可以写成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;
    }
}

测试并重载配置:
[[email protected] ~]# /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
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload


  • 测试


设置代理前:
[[email protected] ~]# curl -x127.0.0.1:80 www.qq.com
This is the default directory.


设置代理后:
[[email protected] ~]# curl -x127.0.0.1:80 www.qq.com
......
#会显示网页的源码。

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


  • dig命令

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


安装dig 命令
[[email protected] ~]# yum install -y bind-utils


www.qq.com解析到了3个ip
[[email protected] ~]# dig www.qq.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> www.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36583
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.qq.com.            IN  A

;; ANSWER SECTION:
www.qq.com.     97  IN  A   14.17.32.211
www.qq.com.     97  IN  A   14.17.42.40
www.qq.com.     97  IN  A   59.37.96.63

;; Query time: 60 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: 一 1月 08 21:


  • http、https、tcp
  • HTTP超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
  • HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全。如果不加密,中间传输数据包的有时候会被截到,就会导致信息泄露,https就是对这个通信的数据包进行加密。
  • HTTP默认的端口号为80,HTTPS的端口号为443。
  • TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。默认监听80端口。


SSL原理

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


  • 安装ssl


[[email protected] ~]# yum install -y openssl


  • ssl工作流程


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


生成ssl密钥对

ssl证书就是一对公钥和私钥


  • 创建私钥


切换目录,密钥对会保存在该目录下:
[[email protected] ~]# cd /usr/local/nginx/conf/


[[email protected] conf]# openssl genrsa -des3 -out tmp.key 2048
#生成rsa格式的密钥对,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,取消密码


[[email protected] conf]# openssl rsa -in tmp.key -out huang.key
#in指定哪个密钥要被转换,out指定输出密钥的 名称。
Enter pass phrase for tmp.key:
writing RSA key
#需要输入上一个tmp.key 的密码。这时候,tmp.key和huang.key其实是一个,只是huang.key没密码。

  • 删除密钥文件


[[email protected] conf]# rm -f tmp.key
#删除有密码的key

  • 生成证书请求文件

生成请求文件目的是为了让请求文件和私钥一起去生成一个公钥。


[[email protected] conf]# openssl req -new -key huang.key -out huang.csr
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.

Country Name (2 letter code) [XX]:CN //国家
State or Province Name (full name) []:Beijing //省或州
Locality Name (eg, city) [Default City]:Beijing //城市
Organization Name (eg, company) [Default Company Ltd]:Beijing //公司
Organizational Unit Name (eg, section) []:Beijing   //组织
Common Name (eg, your name or your server‘s hostname) []:centos 03 //主机名
Email Address []:[email protected] //邮箱

Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:123456  //一个可选的公司名称
An optional company name []:123456

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


  • 创建公钥


[[email protected] conf]# openssl x509 -req -days 365 -in huang.csr -signkey huang.key -out huang.crt
#365是密钥生效的天数。
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Beijing/OU=Beijing/CN=centos 03/[email protected]
Getting Private key
[[email protected] conf]# ls /usr/local/nginx/conf/huang*
/usr/local/nginx/conf/huang.crt /usr/local/nginx/conf/huang.csr /usr/local/nginx/conf/huang.key

crt是公钥,key是私钥。


Nginx配置SSL


创建新的配置文件:
[[email protected] conf]# vim /usr/local/nginx/conf/vhost/ssl.conf
server
{
listen 443;
server_name abc.com;
index index.html index.php;
root /data/wwwroot/abc.com;
ssl on;
#开启ssl
ssl_certificate huang.crt;
#配置公钥
ssl_certificate_key huang.key;
#配置私钥
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#配置协议,一般情况三种都配置上。
}



检测配置:
[[email protected] conf]# /usr/local/nginx/sbin/nginx -t
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
#检测报错,为时便ssl配置,需要重新编译Nginx。

重新编译Nginx:
[[email protected] conf]# cd /usr/local/src/nginx-1.8.0/
[[email protected] nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
.....
[[email protected] nginx-1.8.0]# echo $?
0
[[email protected] nginx-1.8.0]# make
......
[[email protected] nginx-1.8.0]# echo $?
0
[[email protected] nginx-1.8.0]# make install
......
[[email protected] nginx-1.8.0]# echo $?
0

#./configure --hlep 查看可以安装的模块


测试配置文件,并重启nginx服务:
[[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
[[email protected] nginx-1.8.0]# /etc/init.d/nginx restart
Restarting nginx (via systemctl):                          [  确定  ]
[[email protected] nginx-1.8.0]# 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      4905/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1243/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2121/master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      4905/nginx: master
......
#nginx 监听了443和80端口

  • 测试

添加本地域名
[email protected] nginx-1.8.0]# vim /etc/hosts
127.0.0.1 abc.com

[[email protected] nginx-1.8.0]# curl https://abc.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

curl 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.

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

 

使用浏览器访问

需要先在hosts文件中添加本地域名,并清空或添加防火墙规则。

192.168.159.132 abc.com


购买正规证书:沃通等



原文地址:http://blog.51cto.com/754599082/2058866

时间: 2024-10-12 06:57:24

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

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

五十、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