Nginx的再学习

nginx,学习 · 浏览次数 : 195

小编点评

**第一部分 Nginx 版本** * Mainline 版本:最新稳定版,开发版 Stable 版本:最新稳定版,生产环境上建议使用的版本 * Legacy 版本:曾经的稳定版本 **第二部分 IP_HASH 模块** * IP 地址的处理方式: * 如果地址是 IPv4,则从前面的 3 位地址中选择。 * 如果地址是 IPv6,则从 16 个地址中选择。 **第三部分 打包命令** ```bash ./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 ```

正文

第一部分 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的再学习相似的内容:

Nginx的再学习

## 第一部分 Nginx的版本 Nginx官网提供了三个类型的版本 Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版 Stable version:最新稳定版,生产环境上建议使用的版本 Legacy versions:遗留的老版本的稳定版 ma

HTTPS下tomcat与nginx的前端性能比较

HTTPS下tomcat与nginx的前端性能比较 摘要 之前比较http的web服务器的性能. 发现nginx 比 tomcat 要好 50% 然后想到, https的情况下不知道两者有什么区别 所以准备再尝试一下. 换用https进行检查. Springboot的设置 server: ssl:

HTTPS基础原理和配置-2

〇、概述 作为概述,以下是本文要讲的内容。HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感。然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites),本文的重点会落在如何配置 NGINX,让你的网站使用 HTTPS 服务。 除此之外,还有一个使用

Nginx的Keepalive的简单学习

摘要 最近发现某项目的Nginx负载服务器上面有很多Time_wait的TCP连接 可以使用命令 netstat -n |awk '/^tcp/ {++S[$NF]} END{for (a in S) print a , S[a]}' 当时反馈过来 time_wait的连接特别多. 我比较菜, 没有

[转帖]将nginx.conf文件的内容拆分成多个

nginx的如果有多个server模块都配置在同一个nginx.conf文件会显得比较臃肿,后续维护起来也会比较困难,所以可以将内容写入到多个配置文件中然后在nginx.conf文件中通过include命令引入。 1.nginx.conf配置文件内容 user nginx; worker_proce

[转帖]nginx的luajit安装luarocks并安装luafilesystem

nginx的luajit安装luarocks并安装luafilesystem by admin on 2015-07-11 08:05:23 in , 69次 标题有点绕口。我尽量把关键词都贴进去。之前因为自己的nginx安装了ngx_lua模块,但是又需要引入 但是安装luafilesystem又

Nginx的负载均衡策略

Nginx的负载均衡策略 共六种: 轮询、权重、ip_hash、least_conn、fair、url_hash 1、轮询(Round Robin)负载均衡策略:这是一种基本的负载均衡策略,将请求顺序转发给每个后端服务器,每个后端服务器依次处理请求,而轮询正是按照这样的方式平均地为每个后端服务器分配

Nginx反向代理总结

反向代理的种类 1. LVS的方案 2. DNS轮询的方案 3. Nginx的4层代理 4. Nginx的7层代理 5. 网络NAT的处理 Nginx的反向代理-四层` 编译时增加 --with-stream 就可以. 然后可以使用 stream 四层反向代理 可以代理 mysql redis 以及

Nginx 高性能架构解析

本文详细探讨了Nginx的反向代理、负载均衡和性能优化技术,包括配置优化、系统优化、缓存机制和高并发处理策略,旨在帮助专业从业者深入理解并有效应用Nginx。 关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验

[转帖]nginx的map指令

一 ngx_http_map_module模块 1) map 指令是由 'ngx_http_map_module 模块'提供的,默认情况下安装 nginx 都会'安装'该模块. 2) map 的主要作用是'创建自定义变量',通过使用 nginx 的'内置'变量,去'匹配'某些特定规则;如果匹配成功则