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的学习资源 ...
随机推荐
- BugBuilder: 高质量大规模缺陷库自动构建方法
摘要:本文提出并开发了高质量大规模缺陷库全自动构建方法BugBuilder,自动从版本控制系统中的人为编写的补丁中提取完整且精准的缺陷修复补丁. 本文分享自华为云社区<BugBuilder: 高 ...
- webpack原理(2):ES6 module在Webpack中如何Tree-shaking构建
Tree-shaking 最早由打包工具 Rollup 提出 DCE 作用于模块内(webpack 的 DCE 通过 UglifyJS 完成),而 Tree-shaking 则是在打包的时候通过模块之 ...
- vue2升级vue3: h、createVNode、render、createApp使用
h.createVNode 杂乱笔记,凑合着看,不喜勿喷! h 函数是什么 h 函数本质就是 createElement() 的简写,作用是根据配置创建对应的虚拟节点,在vue 中占有极其重要的地位! ...
- 对不起,你做的 A/B 实验都是错的——火山引擎 DataTester 科普
DataTester 是火山引擎数智平台旗下产品,能基于先进的底层算法,提供科学分流能力和智能的统计引擎,支持多种复杂的 A/B 实验类型.DataTester 深度耦合推荐.广告.搜索.UI.产品功 ...
- 文件名: ?Ciwindows\system32 inetsrconfiglapplicationHost.config 错误:无法写入配置文件
出现原因:出现这个问题,一般是在程序运行的时候更新程序,导致的. 解决方案: Microsoft Windows [版本 6.3.9600] (c) 2013 Microsoft Corporatio ...
- ICASSP 2022 | 前沿音视频成果分享:基于可变形卷积的压缩视频质量增强网络
阿里云视频云视频编码与增强技术团队最新研究成果论文<基于可变形卷积的压缩视频质量增强网络>(Deformable Convolution Dense Network for Compres ...
- Java Socket Demo
服务端: package com.sux.demo; import java.io.*; import java.net.ServerSocket; import java.net.Socket; i ...
- 灵魂拷问std::enable_shared_from_this,揭秘实现原理
参考博客: std::enable_shared_from_this原理浅析 引言 在C++编程中,使用智能指针是一种安全管理对象生命周期的方式.std::shared_ptr是一种允许多个指针共享对 ...
- C++ Lambda 快速上手
Lambda 听起来非常的牛逼,很容易就会联想到函数式编程或者 Lambda 演算这样的东西.但是在 C++里,没那么复杂,就把它当匿名函数用就好了 HelloWorld 对于降序排序,我们可以这样写 ...
- 二、swift添加存储策略
系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...