第一部分 Nginx的版本

  1. Nginx官网提供了三个类型的版本
  2. Mainline versionMainline Nginx 目前主力在做的版本,可以说是开发版
  3. Stable version:最新稳定版,生产环境上建议使用的版本
  4. Legacy versions:遗留的老版本的稳定版
  5. mainline是含有最新功能的主线版本,它的迭代速度最快。
  6. stablemainline版本稳定运行一段时间后,将单号大版本转换为双号的稳定版本:
  7. 比如1.22.0就是由1.21.x转换而来。
  8. Legacy则是曾经的稳定版本。
  9. 如果从头开始使用NGINX,那么你只需要选择最新的stable或者mainline版本就可以了。
  10. 建议生产环境还是使用stable的版本 mainline可能会丢失部分特性.

第二部分 Nginx的ip_hash

  1. Nginx有一个的IP_HASH有一个深坑.
  2. 作者默认对前三段IP地址进行hash运算.核心算法为:
  3. 可以看到如果是IPV4 默认取前面的三段IP地址
  4. 如果是IPV6则取 16段地址.
  5. IPV6 就是全部的地址段, 但是IPV4只有部分IP段,比较扯了.
  6. 另外算法里面用到了 1136271 这两个魔数.
  7. 不知道是怎么来的, 也不知道性能如何.
  8. 感觉可以讲 3 修改为 4 进行编译就可以实现简单的四段地址进行hash了.
  9. 文件地址为:
  10. src\http\modules\ngx_http_upstream_ip_hash_module.c
  11. 相关代码如下:
  12. case AF_INET:
  13. sin = (struct sockaddr_in *) r->connection->sockaddr;
  14. iphp->addr = (u_char *) &sin->sin_addr.s_addr;
  15. iphp->addrlen = 3;
  16. break;
  17. #if (NGX_HAVE_INET6)
  18. case AF_INET6:
  19. sin6 = (struct sockaddr_in6 *) r->connection->sockaddr;
  20. iphp->addr = (u_char *) &sin6->sin6_addr.s6_addr;
  21. iphp->addrlen = 16;
  22. break;
  23. #endif
  24. default:
  25. iphp->addr = ngx_http_upstream_ip_hash_pseudo_addr;
  26. iphp->addrlen = 3;
  27. }
  28. for ( ;; ) {
  29. for (i = 0; i < (ngx_uint_t) iphp->addrlen; i++) {
  30. hash = (hash * 113 + iphp->addr[i]) % 6271;
  31. }

第三部分 打包命令

  1. ./configure --prefix=/root/nginx \
  2. --sbin-path=/root/nginx/nginx \
  3. --conf-path=/root/nginx/nginx.conf \
  4. --pid-path=/root/nginx/nginx.pid \
  5. --with-http_ssl_module \
  6. --with-pcre=../pcre2-10.42 \
  7. --with-zlib=../zlib-1.2.13 \
  8. --with-openssl=../openssl-1.1.1s \
  9. --with-stream \
  10. --with-stream_ssl_preread_module

最新版的下载地址为:

  1. https://www.zlib.net/fossils/zlib-1.2.13.tar.gz
  2. https://www.openssl.org/source/openssl-1.1.1s.tar.gz
  3. https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.zip
  4. https://nginx.org/download/nginx-1.22.1.tar.gz
  5. 或者github 下载pcre2

注意

  1. 只需要再nginx下进行make就可以了
  2. 不需要在openssl等下面进行处理
  3. 需要的是openssl等的源码 而不是编译后的产物.

验证下国产CPU的时间

  1. Golden 6150
  2. real 2m27.527s
  3. user 1m54.576s
  4. sys 0m35.541s
  5. 飞腾2000+/64
  6. real 7m58.646s
  7. user 7m34.866s
  8. sys 0m27.167s
  9. 飞腾S2500/2S 128core+1T内存
  10. real 7m22.218s
  11. user 6m46.929s
  12. sys 0m37.320s
  13. 海光7285 2.0Ghz/2S 64Core 128thread 1T内存
  14. real 10m26.932s
  15. user 10m3.485s
  16. sys 0m24.659s
  17. 怀疑尤其是Openssl部分. intel有硬件加速
  18. 但是飞腾没有这一块的芯片,导致sys时间较短
  19. 但是user时间超级长.

Nginx的再学习的更多相关文章

  1. linux下nginx软件的学习

    参考博客 1.nginx是什么 nginx是一个开源的,支持高性能,高并发的web服务和代理服务软件.它是开源的软件. nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更 ...

  2. js再学习笔记

    #js再学习笔记 ##基本 1.js严格区分大小写   2.js末尾的分号可加,也可不加   3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...

  3. Nginx 负载均衡学习

    nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器. nginx负载均衡服务器 tomcat1服务器 tomcat2服务器 1.1   ...

  4. express再学习

    对比spring,django,再学习express就有很多共通的地方啦... 看的书是一本小书,<express in action>,排版比较好. 昨天开始看,看了快四分之一啦... ...

  5. nginx源码学习资源(不断更新)

    nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...

  6. Android再学习-20141023-Intent-Thread

    20141023-Android再学习 Intent对象的基本概念 Intent是Android应用程序组件之一 Intent对象在Android系统中表示一种意图 Intent当中最重要的内容是ac ...

  7. Android再学习-20141022-Activity的生命周期

    20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...

  8. Android再学习-20141018-布局-进度条

    20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...

  9. 再学习sqlhelper

    在机房收费重构系统的时候,第一次学习sqlhelper.当时感觉比较简单,没有写博客总结,现在又经过了图书馆的学习,感觉还是有必要写一写的. SqlHelper是一个基于.NETFramework的数 ...

  10. nginx源码学习资源

    http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源 ...

随机推荐

  1. 云图说|新一代Serverless应用托管引擎——CAE

    本文分享自华为云社区<云图说|新一代Serverless应用托管引擎--CAE>,作者:阅识风云. 开发运营一个应用软件,面临种种挑战:软件栈厚重.开发上线慢.资源易浪费.运维投入高.突发 ...

  2. 用GaussDB合理管控数据资源的几点心得

    一.摘要 项目交付中可能会遇到同时包含核心交易(OLTP)和报表分析(OLAP)的混合业务场景,其中报表分析类业务复杂度高,消耗大量系统资源,但实时性要求较低,而核心交易类业务并发较大,多为简单事务处 ...

  3. Rust太难?那是你没看到这套Rust语言学习万字指南!

    摘要:从开发环境.语法.属性.内存管理和Unicode等五部分,为你带来一份详细的Rust语言学习的精华总结内容. 一.Rust开发环境指南 1.1 Rust代码执行 根据编译原理知识,编译器不是直接 ...

  4. 数仓在线运维:如何进行在线增删CN?

    摘要:集群运行过程中,根据集群的综合负载和业务接入情况进行分析:增加CN可以适当降低CPU消耗,增大接入连接数,分散CN节点业务压力,根据实际情况来识别是否要增加CN,如果是提升集群容量和扩展比能力, ...

  5. 人人都在聊的云原生数据库Serverless到底是什么?

    摘要:华为云数据库营销专家Tony Chen和华为云数据库高级产品经理佳恩开展了一场关于云原生数据库与Serverless结合的直播对话. 云计算的迅猛发展推动了数据库的变革,云原生数据库成为当前数据 ...

  6. 带你认识三种kafka消息发送模式

    摘要:在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率. 本文分享自华为云社区<kafka消息发送模 ...

  7. LAS Spark+云原生:数据分析全新解决方案

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数据规模的迅速增长和数据处理需求的不断演进,云原生架构和湖仓分析成为了现代数据处理的重要趋势.在这个数字化时代 ...

  8. 如何实现数据流畅转换?火山引擎ByteHouse推出ELT能力

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   在数据分析场景中,企业使用的数据通常具备来源多样化的特点,如支付交易记录.用户行为等,且数据格式各异,有的为行 ...

  9. 低风险稳健策略:BTC套利策略

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 币安零手续费带来的机会 从7月8日的20点开始,币安推出了BTC现货交易零手续费的优惠活动,不论是Mak ...

  10. 白话 Pulsar Bookkeeper 的存储模型

    最近我们的 Pulsar 存储有很长一段时间数据一直得不到回收,但消息确实已经是 ACK 了,理论上应该是会被回收的,随着时间流逝不但没回收还一直再涨,最后在没找到原因的情况下就只有一直不停的扩容. ...