码迷,mamicode.com
首页 > 其他好文 > 详细

nginx配置ssl证书

时间:2018-08-16 23:00:15      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:tps   called   pen   字符   location   -o   公司   speed   wing   

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证书

标签:tps   called   pen   字符   location   -o   公司   speed   wing   

原文地址:http://blog.51cto.com/8844414/2160939

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!