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的学习资源 ...
随机推荐
- 【华为云技术分享】LiteOS无法直接烧录或者烧录失败解决方法--ST-Link
前提条件: 程序编译成功,并且电脑上已经安装ST-Link驱动,你使用的仿真器也是ST-Link. 上图黑色的是J-Link,下图紫色的是ST-Link,本教程适用于ST-Link,如果是J-Link ...
- 云图说|应用编排服务AOS,助力应用上云自动化
如今,企业想要扩大业务.进行创新,上云已经成为了必经之路.应用编排服务AOS为企业提供应用上云的自动化能力,支持编排华为云上的主流云服务,将复杂的云服务资源配置和应用部署配置通过模板描述,从而实现在华 ...
- 标准物模型:设备无缝对接,IOT界的福音
摘要:信息模型是解决IoT产业发展一系列挑战的关键,在信息模型的基础上可以推进行业标准/架构的统一,进而实现产业链生态的协同. 本文分享自华为云社区<[云驻共创]标准物模型,物联网的福音> ...
- 跟我学AI建模:分子动力学仿真模拟之DeepMD-kit框架
摘要:分子动力学仿真模拟的重点就在于如何建立模型描述分子间的相互作用. 本文分享自华为云社区<AI建模-分子动力学仿真>,作者: 木子_007 . 一.背景 分子动力学的仿真模拟广泛应用于 ...
- Ambari2.7.3.0添加组件
Ambari 2.7.3.0安装新组件和之前版本略有不同,本文将简述安装新组件的简单过程. 前提是大家已经安装好Ambari 2.7.3.0 这时候由于有一些组件没有添加,就需要安装新的组件. 首先我 ...
- Django rest_framework用户认证和权限
完整的代码 https://gitee.com/mom925/django-system 使用jwt实现用户认证 pip install djangorestframework-simplejwt 重 ...
- Exception in thread "main" joptsimple.UnrecognizedOptionException: zookeeper is not a recognized option
背景: 在kafka集群上使用topic相关的命令时,报错: Exception in thread "main" joptsimple.UnrecognizedOptionExc ...
- 【HZERO】值集翻译
值集翻译 值集管理: https://open.hand-china.com/document-center/doc/component/163/16090?doc_id=156008&doc ...
- Leaflet 使用图片作为地图
Leaflet 使用图片作为地图 关键代码: L.CRS.Simple.transformation = new L.Transformation(1, 0, 1, 0); // 坐标原点切换为左上角 ...
- 2018年第九届 蓝桥杯A组 C/C++决赛题解
蓝桥杯历年国赛真题汇总:Here 1.三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) 求该三角形的面积. 注意,要提交的是 ...