博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx使用用户真实IP做hash(解决经过CND后ip_hash失效问题)
阅读量:7192 次
发布时间:2019-06-29

本文共 1554 字,大约阅读时间需要 5 分钟。

在nginx中常用的有以下四种负载均衡的算法,分别是:round-robin、ip-hash、least-connected和weighted。当然在实际生产中或许使用最多的就是ip-hash了,一般会这样使用:

1
2
3
4
5
upstream h5 {
   
ip_hash;
   
server 192.168.100.104:9080;
   
server 192.168.100.105:9080;
 
}

如果用户是直连的话那还好,nginx可以根据用户的IP均匀地向多个服务器节点分配负载请求。但是如果我们的域名使用了CDN加速的话,那么用户在请求js、CSS、图片等静态资源时并没有直接请求到我们的服务器,而是请求的少量的CDN加速节点服务器,从而造成有少量IP(PS:CDN节点服务器IP)频繁大量访问nginx。同时又因为ip_hash策略的原因,导致出现部分服务器的负载非常大,其他服务器却没有多少请求的现象

因此,为了解决这个问题,我们可以通过在nginx中获取用户请求时的真实IP,然后根据这些真实IP做hash策略,也就是自定义nginx的hash策略。实现步骤如下:

(1)修改nginx配置文件nginx.conf:

1
[root@tkde-iphone ~]
# vim /usr/local/nginx/conf/nginx.conf

http {


include mime.types; #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log logs/access.log main;

#获取用户真实IP,并赋值给变量$clientRealIP
map $http_x_forwarded_for $clientRealIp {


“” $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}

……..

include gzip.conf; #压缩配置文件
include proxy.conf; #proxy_cache参数配置文件
include vhost/*.conf; #nginx虚拟主机包含文件目录
include mysvrhost.conf; #后端WEB服务器列表文件
}

(2)修改nginx的配置文件mysvrhost.conf:

1
[root@tkde-iphone ~]
# vim /usr/local/nginx/conf/mysvrhost.conf

upstream h5 {


hash $clientRealIp;
server 192.168.100.104:9080;
server 192.168.100.105:9080;
}

注:这种方式也并不是万无一失了,因为请求的Header中的HTTP_X_FORWARDED_FOR参数可以在请求时被修改的,因此就存在一定的安全隐患。不过现在的CDN一般都有加速防黑的功能,所有实际上问题也不是很大。如果实在不放心的话不是还可以使用SSL证书整站加密嘛

本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1864239,如需转载请自行联系原作者

你可能感兴趣的文章
(new Function("return " + json))();
查看>>
mscrm 4.0 报表服务器报错
查看>>
SVM原理简介
查看>>
TLV----Demo讲解
查看>>
iphone-common-codes-ccteam源代码 CCUILocalNotification.m
查看>>
指针数组和数组指针差异
查看>>
centos7 学习1 KDE配置中文
查看>>
收集的一些零散代码
查看>>
MyBatis官方文档——XML 映射配置文件
查看>>
GL_Oracle Erp月结和年节流程讨论(概念)
查看>>
浅谈大型网站架构技术进化
查看>>
Ferris教程学习笔记:js示例2.16 鼠标移过,改变图片路径
查看>>
Mermaid js与流程图、甘特图..
查看>>
[转] mongodb下载、安装、配置与使用
查看>>
Sql Server来龙去脉系列 必须知道的权限控制基础篇
查看>>
转 rman-08120 以及查询隐含参数
查看>>
纹理分析
查看>>
嵌入式开发之davinci--- 8148/8168/8127 中swms、Mosaic’s、display 显示pal 模式
查看>>
收集的网络上大型的开源图像处理软件代码(提供下载链接)
查看>>
java 调度框架quartz
查看>>