热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

另一种方式实现nginx的urlhash

使用NginxHttpUpstreamRequestHashModule的方式,增加或减少机器时所引起的hash全部错乱的问题还是很令人担心,所以经过一段时间细致思考,觉得由自己手工制定并实现urlhash规则,然后利用nginx的location标签或if语法来实现来得更为灵活,可操作性和可用性

使用NginxHttpUpstreamRequestHashModule的方式,增加或减少机器时所引起的hash全部错乱的问题还是很令人担心,所以经过一段时间细致思考,觉得由自己手工制定并实现url hash规则,然后利用nginx的location标签或if语法来实现来得更为灵活,可操作性和可用性会大大加强。不过配置就稍显复杂了,也需要程序方面的支持。

使用这种环境,主要需要考虑链接形式,链接形式不能够是/xxx.jsp?id=1这样的带有?的,否则处理起来会很复杂,需要使用rewrite将这种形式的url变化成/1/1.html,其中加一级目录的目的是可以利用到location标签。如果是纯静态页或图片,一般都会有自成的目录规则。

首先我们制定一个链接的划分规则,这个规则有点区别于文件目录的划分规则,它本身并不需要考虑文件夹内文件数目的多少,制定这个规则的目的是容纳足够多的服务器!一般来说,如果id是字符型的,只需要分出26个字母 10个数字,能够容纳36台cache服务器,这已经很足够了。如果是数字型的id,那就拿数字id0,就可以支持100台cache,已经足够夸张。一般说来,,支持10台服务器应该就足够了,配置也容易一点。

有了这个目录规则,就可以通过nginx的语法来书写配置了。

首先制定一堆upstream,如果是偶数,理论能够分得更均衡。

upstream a {
server 127.0.0.1:3121;
}

upstream b {
server 127.0.0.1:3122;
}

#配置一个all的目的是兼容不进行hash的剩余的页面,比如首页
upstream all {
server 127.0.0.1:3121;
server 127.0.0.1:3122;
}

1、已经按/a/划好的,使用location划分

location ~* /a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r/ {
proxy_pass http://a;
}

location ~* /s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|0/ {
proxy_pass http://b;
}

location / {
proxy_pass http://all;
}

2、已经有一定链接规则,不想变化,可以使用if语句判断

location / {
proxy_pass http://all;
if  ( $request_uri ~* /page_(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r)/ ) {
proxy_pass http://a;
}
if  ( $request_uri ~* /page_(s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|0)/ ) {
proxy_pass http://b;
}
}

在新增服务器后,需要改动配置,手工将一些目录规则的文件分出去,剩下的仍然访问原先的服务器,不会造成太严重影响。

在这种配置下,像首页这样的访问量大的单页,它访问量大,容量小,所以不可能产生容灾问题。使用轮循的方式工作,会比原先分到死定一台cache,在可用性上要好得多。


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
author-avatar
wyzf88_987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有