首页 > 系统相关 >Nginx的再学习

Nginx的再学习

时间:2022-12-25 22:13:12浏览次数:40  
标签:addr nginx -- iphp 学习 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

怀疑尤其是Openssl部分. intel有硬件加速
但是飞腾没有这一块的芯片,导致sys时间较短
但是user时间超级长.

标签:addr,nginx,--,iphp,学习,Nginx,版本
From: https://www.cnblogs.com/jinanxiaolaohu/p/17004695.html

相关文章

  • java 学习
    javacJunior.javajavaJunior  Employee.java//importjava.io.*;//下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类publicclass......
  • 《学习OpenCV3》第7章第4题-SVD奇异值分解的验算
    原文题目:中文翻译: 解题过程d.使用OpenCV编写代码/************************************************************************......
  • turtle学习2
    turtle学习2准备工作新建一个文件导入turtle库importturtle建立一个画笔p=turtle.Turtle()抬笔落笔相关知识p.penup()表示抬笔p.pendown()表示落笔具体演示......
  • 【博学谷学习记录】超强总结,用心分享|狂野架构TiDB与MySQL兼容性对比
    目录TiDB与MySQL兼容性对比3.1TiDB不支持的MySql特性3.2自增ID3.3SELECT的限制3.4视图3.5默认设置差异3.5.1字符集3.5.2排序规则3.5.3大小写敏感3.5.3.1参数解释......
  • 英语学习词根词缀总结
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站​​点击跳转浏览。​​目录​​一.联想法​​​​二.词根词缀法​​​​......
  • 我学习图像处理的小结
      前一段时间,我一直在制作OpenCV基础知识的课件(《学习OpenCV3.0初级实战视频课程》 ​​http://edu.51cto.com/course/10381.html​​​,《学习OpenCV3.0中级实战视......
  • charles学习笔记
    一:认识Charles1:Charles是什么?CharlesisanHTTPproxy/HTTPmonitor/ReverseProxythatenablesadevelopertoviewalloftheHTTPandSSL/HTTPStrafficb......
  • Linux学习目录
    超哥带你学linuxDay1:(1)​​linux博客内容地址(2):​​服务器核心知识​​(3)​​linux入门介绍知识​​(4)​​vmware系统安装知识(5)​​远程连接linux知识今日作业:1.服......
  • ELK学习目录
    DAY1.elasticsearch和kibana环境搭建以及简单介绍A:环境搭建配置(1)j​​ava虚拟机安装​​(2)​​elasticsearch安装&&kibana安装​​B:学习和解决的问题(1)​......
  • 学习笔记——刷题小记
    2022.12.25550D-RegularBridge*1900+构造+图论。评分虚高,属于比较一眼的题;主要考察构造能力,与图论关联不大,不过涉及到了“割边”的知识,这个图论标签打的没太大毛......