您的位置:首页 > 运维架构 > Nginx

nginx配置ssl证书

2018-08-16 22:46 351 查看

nginx负载均衡

由于一个Web服务同时能处理的用户并发请求的数量有限,同时还有机器故障的情况,所以一个Web站点通常会在N台机器上各部署一套同样的程序。当某一个服务挂掉的时候,还有第二个、第三个。继续为用户提供服务,给用户的感觉,你的服务还在正常的运行,同时避免一台服务器处理请求负载高,而其他的服务器又处于空闲状态,造成资源浪费
nginx在upsteam中来指定多个负载均衡的真实ip地址,server中的proxy_pass来引用upstream定义的ip模块,ip_hash让用户请求始终在一个服务器上处理,这样就不会把同一个用户的请求分发到不同服务器上
比如不同服务器在一段时间内处理请求造成登录状态异常
nginx支持后端服务器的端口代理,如能代理后端服务器的80端口,nginx不支持负载均衡后端是443端口的web服务
如果需要代理443这种端口的话,只能在负载均衡这台服务器上配置443,再由负载均衡去把80转发成443端口
如果让用户通过负载均衡服务器访问的是https的网站时,则在负载均衡服务器上指定后端是80端口的web服务器

[root@localhost vhost]# vim load.conf
upstream qq
{
   ip_hash;
   server 111.161.64.40:80;
   server 111.161.64.48:80;
}
server
{
   listen 80;
   server_name .*.qq.com;
   location /
   {
       proxy_pass http://qq;        proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

在linux终端中进行访问测试,在DNS设置解析时,只要把负载均衡服务器添加到DNS解析中,处理请求先通过负载代理处理,之后负载均衡处理方式是把请求转发给upstream中的服务器处理

[root@localhost vhost]# curl -x127.0.0.1:80 www.qq.com |head -n 10
% Total % Received % Xferd Average Speed Time Time Time Current
                                Dload Upload Total Spent Left Speed
 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta content="text/html; charset=gb2312" http-equiv="Content-Type">
<meta http-equiv="X-UA-Compatible" content="IE=edge">

ssl原理

https是网页传输时加密的一种通信协议,实现这种通信协议的是ssl加密协议,https避免网站数据传输时数据被抓取解析,通过公钥加密私钥解密方式来解码传输的数据

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



生成ssl密钥对

生成密钥对要使用到openssl工具,没有这个工具需要安装,这里使用rpm -qf通过这个命令查询这个命令的包是否安装了,这里本机服务器已经安装了openssl命令的安装包,生下的不再多做演示,可以通过yum命令安装这个安装包
[root@localhost conf]# rpm -qf
which openssl

生成ssl证书的命令,下面会详细介绍各个参数的意义

openssl genrsa -des3 -out tmp.key 2048
openssl rsa -in tmp.key -out aaa.com.key
openssl req -new -key aaa.com.key -out aaa.com.csr
openssl x509 -req -days 365 -in aaa.com.csr -signkey aaa.com.key -out aaa.com.crt

生成初始的key私钥,这里私钥携带密码,我们需要将密码删除掉

[root@localhost conf]# 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:

创建初始密码时需要输入一个密码,但是这个密码会在用户访问网站时需要认证,通常我们不希望这样,需要我们把私钥中的密码删除掉

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

使用私钥文件生成证书请求文件

[root@localhost conf]# openssl req -new -key aaa.com.key -out aaa.com.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]:国家    
State or Province Name (full name) []:地区  
Locality Name (eg, city) [Default City]:城区
Organization Name (eg, company) [Default Company Ltd]:公司
Organizational Unit Name (eg, section) []:部门
Common Name (eg, your name or your server's hostname) []:主机名或个人名
Email Address []:邮箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:设定证书密码
An optional company name []:公司其他名称

使用证书请求文件和私钥来生成一个公钥文件

[root@localhost conf]# openssl x509 -req -days 365 -in aaa.com.csr -signkey aaa.com.key -out aaa.com.crt
Signature ok
subject=/C=JP/ST=\xC3\xA5\xC2\xA4\xC2\xA7\xC3\xA9\xC2\x98\xC2\xAA/L=\xC3\xA5\xC2\x9F\xC2\x8E\xC3\xA4\xC2\xB8\xC2\x9C\xC3\xA5\xC2\x8C\xC2\xBA/O=\xC3\xA4\xC2\xB8\xC2\xAD\xC3\xA4\xC2\xBA\xC2\x8C\xC3\xA7\xC2\xA7\xC2\x91\xC3\xA6\xC2\x8A\xC2\x80\xC3\xA6\xC2\xA0\xC2\xAA\xC3\xA5\xC2\xBC\xC2\x8F\xC3\xA4\xC2\xBC\xC2\x9A\xC3\xA7\xC2\xA4\xC2\xBE/OU=\xC3\xA8\xC2\xBF\xC2\x90\xC3\xA7\xC2\xBB\xC2\xB4\xC3\xA6\xC2\x8A\xC2\x80\xC3\xA6\xC2\x9C\xC2\xAF\xC3\xA9\xC2\x83\xC2\xA8\xC3\xA9\xC2\x97\xC2\xA8/CN=localhost/emailAddress=1234@zhonger.jp
Getting Private key

nginx配置ssl

在server模块下配置ssl证书,配置位置在listen后面,也就是指定域名和网站根目录的相同配置下
如果nginx在编译时未安装ssl_module,那么就需要重新编译添加上ssl模块,配置ssl证书后然后重新启动

server
{
   listen 443;
   server_name aaa.com;
   index index.html index.php;
   root /deta/wwwroot/aaa/
   ssl on;
   ssl_certificate aaa.com.crt;
   ssl_certificate_key aaa.com.key;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

未完,可能不再在博客中补充需要注意的地方
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx 配置 SSL