Nginx的再学习
第一部分 Nginx的版本
Nginx官网提供了三个类型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版
mainline是含有最新功能的主线版本,它的迭代速度最快。
stable是mainline版本稳定运行一段时间后,将单号大版本转换为双号的稳定版本:
比如1.22.0就是由1.21.x转换而来。
Legacy则是曾经的稳定版本。
如果从头开始使用NGINX,那么你只需要选择最新的stable或者mainline版本就可以了。
建议生产环境还是使用stable的版本 mainline可能会丢失部分特性.
第二部分 Nginx的ip_hash
Nginx有一个的IP_HASH有一个深坑.
作者默认对前三段IP地址进行hash运算.核心算法为:
可以看到如果是IPV4 默认取前面的三段IP地址
如果是IPV6则取 16段地址.
IPV6 就是全部的地址段, 但是IPV4只有部分IP段,比较扯了.
另外算法里面用到了 113和6271 这两个魔数.
不知道是怎么来的, 也不知道性能如何.
感觉可以讲 3 修改为 4 进行编译就可以实现简单的四段地址进行hash了.
文件地址为:
src\http\modules\ngx_http_upstream_ip_hash_module.c
相关代码如下:
case AF_INET:
sin = (struct sockaddr_in *) r->connection->sockaddr;
iphp->addr = (u_char *) &sin->sin_addr.s_addr;
iphp->addrlen = 3;
break;
#if (NGX_HAVE_INET6)
case AF_INET6:
sin6 = (struct sockaddr_in6 *) r->connection->sockaddr;
iphp->addr = (u_char *) &sin6->sin6_addr.s6_addr;
iphp->addrlen = 16;
break;
#endif
default:
iphp->addr = ngx_http_upstream_ip_hash_pseudo_addr;
iphp->addrlen = 3;
}
for ( ;; ) {
for (i = 0; i < (ngx_uint_t) iphp->addrlen; i++) {
hash = (hash * 113 + iphp->addr[i]) % 6271;
}
第三部分 打包命令
./configure --prefix=/root/nginx \
--sbin-path=/root/nginx/nginx \
--conf-path=/root/nginx/nginx.conf \
--pid-path=/root/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=../pcre2-10.42 \
--with-zlib=../zlib-1.2.13 \
--with-openssl=../openssl-1.1.1s \
--with-stream \
--with-stream_ssl_preread_module
最新版的下载地址为:
https://www.zlib.net/fossils/zlib-1.2.13.tar.gz
https://www.openssl.org/source/openssl-1.1.1s.tar.gz
https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.zip
https://nginx.org/download/nginx-1.22.1.tar.gz
或者github 下载pcre2
注意
只需要再nginx下进行make就可以了
不需要在openssl等下面进行处理
需要的是openssl等的源码 而不是编译后的产物.
验证下国产CPU的时间
Golden 6150
real 2m27.527s
user 1m54.576s
sys 0m35.541s
飞腾2000+/64
real 7m58.646s
user 7m34.866s
sys 0m27.167s
飞腾S2500/2S 128core+1T内存
real 7m22.218s
user 6m46.929s
sys 0m37.320s
海光7285 2.0Ghz/2S 64Core 128thread 1T内存
real 10m26.932s
user 10m3.485s
sys 0m24.659s
怀疑尤其是Openssl部分. intel有硬件加速
但是飞腾没有这一块的芯片,导致sys时间较短
但是user时间超级长.
Nginx的再学习的更多相关文章
- linux下nginx软件的学习
参考博客 1.nginx是什么 nginx是一个开源的,支持高性能,高并发的web服务和代理服务软件.它是开源的软件. nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更 ...
- js再学习笔记
#js再学习笔记 ##基本 1.js严格区分大小写 2.js末尾的分号可加,也可不加 3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...
- Nginx 负载均衡学习
nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器. nginx负载均衡服务器 tomcat1服务器 tomcat2服务器 1.1 ...
- express再学习
对比spring,django,再学习express就有很多共通的地方啦... 看的书是一本小书,<express in action>,排版比较好. 昨天开始看,看了快四分之一啦... ...
- nginx源码学习资源(不断更新)
nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...
- Android再学习-20141023-Intent-Thread
20141023-Android再学习 Intent对象的基本概念 Intent是Android应用程序组件之一 Intent对象在Android系统中表示一种意图 Intent当中最重要的内容是ac ...
- Android再学习-20141022-Activity的生命周期
20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...
- Android再学习-20141018-布局-进度条
20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...
- 再学习sqlhelper
在机房收费重构系统的时候,第一次学习sqlhelper.当时感觉比较简单,没有写博客总结,现在又经过了图书馆的学习,感觉还是有必要写一写的. SqlHelper是一个基于.NETFramework的数 ...
- nginx源码学习资源
http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源 ...
随机推荐
- MySQL数据库技术与应用:数据查询
摘要:数据查询是数据库系统应用的主要内容,也是用户对数据库最频繁.最常见的基本操作请求. 数据查询 数据查询是数据库系统应用的主要内容,也是用户对数据库最频繁.最常见的基本操作请求.数据查询可以根据用 ...
- MySQL 数据库救火:磁盘爆满了,怎么办?
摘要:当磁盘空间爆满后,MySQL会发生什么事呢?又应该怎么应对? 本文分享自华为云社区<[MySQL 数据库救火]- 磁盘突然爆满的处理方式>,原文作者:技术火炬手 . 大多数用户在对于 ...
- 深度解读鸿蒙轻内核CPU占用率
摘要:CPUP(Central Processing Unit Percentage,CPU占用率)分为系统CPU占用率和任务CPU占用率.用户通过系统级的CPU占用率,判断当前系统负载是否超出设计规 ...
- 2023年iOS App Store上架流程详解(上)
很多开发者在开发完iOS APP.进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store ...
- appuploader 入门使用
回想一下我们发布 iOS 应用,不仅步骤繁琐,非常耗时.一旦其中一步失误了,又得重新来.作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生.在软件工程里面,我们一直都推崇把重复.流程化的工作交 ...
- IDEA画图神器 PlantUML
PlantUML 是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效.可以支持时序图.类图.对象图.活动图.思维导图等图形的绘制. 下面使用PlantUML来绘制一张流程图,可以实 ...
- IDEA 2021.2 新建JavaWeb项目及Tomcat部署
前文:JSP 简单入门与 IDEA 开发环境配置 参考链接: https://zhuanlan.zhihu.com/p/68133583 https://www.cnblogs.com/javabg/ ...
- 面试通过,拿到offer了,不去了会怎么样?
接受了offer但不去,其实没啥事,但这属于诚信问题. 这里有个概念,给了offer但不接受,这没事. 给了offer,也接受了,但在入职前一周(或在其它约定的时间范围内)说不去,同时姿态放低些打招呼 ...
- vue实现文件上传功能
https://www.jb51.net/article/145500.htm Element中的el-upload使用过程中踩的坑 https://www.jianshu.com/p/c837224 ...
- ava进阶(39)--守护线程与定时器
文档目录: 一.守护线程 二.定时器 ---------------------------------------分割线:正文------------------------------------ ...