93.Nginx配置:负载均衡和SSL配置

一、负载均衡

负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称backend)来做复杂的计算、处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网IP地址,并且在业务量增加的时候可以方便地扩容后台服务器。
负载均衡可以分为硬件负载均衡和软件负载均衡,前者一般是专用的软件和硬件相结合的设备,设备商会提供完整成熟的解决方案,通常也会更加昂贵。软件的复杂均衡以Nginx占据绝大多数,本文也是基于其手册做相应的学习研究的。

1、修改虚拟主机配置文件(以qq.com为例)

[[email protected] ~]# cd /usr/local/nginx/conf/vhost/ [[email protected] vhost]# dig qq.com //dig命令获取IP,没有dig命令,使用‘yum install -y bind-untils’安装 ; <<>> 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: 38970 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;qq.com. IN A ;; ANSWER SECTION: qq.com. 414 IN A 125.39.240.113 qq.com. 414 IN A 61.135.157.156 ;; Query time: 37 msec ;; SERVER: 119.29.29.29#53(119.29.29.29) ;; WHEN: 五 3月 16 22:00:18 CST 2018 ;; MSG SIZE rcvd: 67 //可以看到两个IP,有两个IP就可以走负载均衡了 [[email protected] vhost]# vim load.conf //编辑配置文件,增加以下内容 #配置内容 upstream qq #名字自定义 { 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; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

2、测试

[[email protected] vhost]# /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] vhost]# /usr/local/nginx/sbin/nginx -s reload [[email protected] vhost]# curl -x127.0.0.1:80 www.qq.com -I HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Fri, 16 Mar 2018 14:18:04 GMT Content-Type: text/html; charset=GB2312 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding Expires: Fri, 16 Mar 2018 14:19:04 GMT Cache-Control: max-age=60 Vary: Accept-Encoding Vary: Accept-Encoding X-Cache: HIT from tianjin.qq.com //这里如果不加-I选项也是200状态码,因为有默认虚拟主机,不过其他提示不一样
测试下不加-I选项
[[email protected] vhost]# curl -x127.0.0.1:80 www.qq.com
结果如下图:

注意: Nginx不支持代理https,只能代理http。

二、Nginx配置SSL

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


1、生成自定义的SSL证书(仅坐试验用)
[[email protected] conf]# openssl genrsa -des3 -out tmp.key 2048 //没有openssl命令,则通过“yum install -y openssl”安装 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即“私钥”,2048为加密字符长度,会让我们输入密码,不能太短,否者不成功。 [[email protected] conf]# openssl rsa -in tmp.key -out sdwaqw.key Enter pass phrase for tmp.key: writing RSA key //把tmp.key转化成sdwaqw.key,目的是删除刚才设置的密码,如果不清除密码,后面很不方便 [[email protected] conf]# rm -f tmp.key [[email protected] conf]# openssl req -new -key sdwaqw.key -out sdwaqw.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) []:JS Locality Name (eg, city) [Default City]:SZ Organization Name (eg, company) [Default Company Ltd]:XXLtd Organizational Unit Name (eg, section) []:sdwaqw.com Common Name (eg, your name or your server‘s hostname) []:ZZ Email Address []:[email protected] Please enter the following ‘extra‘ attributes to be sent with your certificate request A challenge password []:zzz123456 An optional company name []:z //生成证书请求文件,key文件和csr文件生成最终的公钥文件。Common Name为后面配置Nginx配置文件server_name [[email protected] conf]# openssl x509 -req -days 365 -in sdwaqw.csr -signkey sdwaqw.key -out sdwaqw.crt Signature ok subject=/C=CN/ST=JS/L=C/O=C/OU=C/CN=sdwaqw.com/emailAddress=z Getting Private key [[email protected] conf]# ls |grep sdwaqw sdwaqw.crt sdwaqw.csr sdwaqw.key //最终生成crt证书,也就是公钥

2、配置Nginx支持SSL

1)、编辑配置文件

[[email protected] vhost]# vim ssl.conf //写入以下内容 server { listen 443; server_name sdwaqw.com; index index.html index.php; root /data/wwwroot/ssltest; ssl on; ssl_certificate sdwaqw.crt; ssl_certificate_key sdwaqw.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; }

2)、检查配置是否有问题

[[email protected] vhost]# /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
这说明当前Nginx并不支持SSL,因为之前Nginx编译时并没有配置支持SSL的参数,所以需要重新编译一次,加上SSL参数:
[[email protected] vhost]# cd /usr/local/src/nginx-1.12.2 [[email protected] nginx-1.12.2]# ./configure --help |grep -i ssl --with-http_ssl_module enable ngx_http_ssl_module --with-mail_ssl_module enable ngx_mail_ssl_module --with-stream_ssl_module enable ngx_stream_ssl_module --with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module --with-openssl=DIR set path to OpenSSL library sources --with-openssl-opt=OPTIONS set additional build options for OpenSSL [[email protected] nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module [[email protected] nginx-1.12.2]# make [[email protected] nginx-1.12.2]#make install [[email protected] nginx-1.12.2]# /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.12.2]# /etc/init.d/nginx restart

3)、测试

在window的hosts文件中添加:192.168.242.128 sdwaqw.com
[[email protected] vhost]# mkdir /data/wwwroot/ssltest [[email protected] vhost]# echo "ssl test" > /data/wwwroot/ssltest/index.html

原文地址:http://blog.51cto.com/sdwaqw/2088623

时间: 2024-10-15 03:51:12

93.Nginx配置:负载均衡和SSL配置的相关文章

Nginx专题(2):Nginx的负载均衡策略及其配置

摘要:本文介绍了Nginx的负载均衡策略,一致性hash分配原理,及常用的故障节点的摘除与恢复配置. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 周恒<Nginx的细枝末节> 分享者:宜信支付结算八方数据团队高级技术经理 周恒 原文首发于支付结算技术团队公号:野指针 前篇Nginx专题(1):Nginx之反向代理及配置详细介绍了Nginx功能之一--反向代理.本篇文章将重点介绍Nginx功能之二--负载均衡. 为了增加对负载均衡的好

Nginx的负载均衡策略及配置

转:https://www.cnblogs.com/yixinjishu/p/12028327.html 为了增加对负载均衡的好感,我们先了解负载均衡能实现什么. 将多个服务器节点绑定在一起提供统一的服务入口. 故障转移,在意外发生的时候,可以增加一层保险,减少损失. 降低上线运维复杂度,实现平滑上线.运维和开发同学都喜欢. 下面正式进入主题. 一.Nginx的负载均衡策略 负载均衡就是将请求“均衡”地分配到多台业务节点服务器上.这里的“均衡”是依据实际场景和业务需要而定的. 对于Nginx来说

Nginx配置:负载均衡和SSL配置

一.负载均衡 负载均衡在服务端开发中算是一个比较重要的特性.因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称backend)来做复杂的计算.处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网IP地址,并且在业务量增加的时候可以方便地扩容后台服务器.负载均衡可以分为硬件负载均衡和软件负载均衡,前者一

使用nginx+tomcat负载均衡

标注:该文章属于蚂蚁课堂原创内容,其他网站转载必须标注来源与蚂蚁课堂.www.itmayiedu.com 1.1 什么是负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 1.2 需求 nginx作为负载

Nginx的负载均衡的那点事 (转)

本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软件园等) DNS轮询 F5物理设备 Nginx等轻量级架构 那我们看看Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,wei

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

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

Nginx的负载均衡 1. 查找www.qq.com域名对应IP做测试 [[email protected] ~]# yum install -y bind-utils //安装dig命令包 [[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: ;

【Nginx】配置Nginx的负载均衡

阅读目录 参考的优秀文章 在本机运行2个Tomcat Nginx的负载均衡配置 参考的优秀文章 tomcat配置文件server.xml详解 AJP协议总结与分析 Using nginx as HTTP load balancer 在本机运行2个Tomcat 现需要运行两个Tomcat,监听不同端口,让Nginx作负载均衡跳转过来.Tomcat版本:apache-tomcat-7.0.69-windows-x64.zip 要在一台机器运行两个Tomcat,要解决端口的冲突,我们只需要D:\gre

Nginx做为CDN缓存负载均衡代理的配置实现

系统架构: nginx+tomcat+mysql 本文只做Nginx做为CDN缓存负载均衡代理的配置实现的介绍 相关软件: nginx-1.8.1.tar.gz ngx_cache_purge-2.3.tar.gz (用于手动清理缓存) 一.nginx安装 [[email protected] ~]tar -xf nginx-1.8.1.tar.gz [[email protected] ~]tar -xf ngx_cache_purge-2.3.tar.gz -C /usr/local/ngx