[转帖]nginx源码编译及优化

nginx,源码,编译,优化 · 浏览次数 : 0

小编点评

# server1 server 172.25.4.3 weight=2; # 权重[root@server2 conf]# systemctl reload nginx1234567891011121314151617181920212223 # 访问哪个域名就调度哪个模块 location / { root /www1; index index.html; proxy_pass http://westos; } # server2 server 172.25.4.4 weight=2; # 访问哪个域名就调度哪个模块 location / { root /www2; index index.html; proxy_pass http://redhat; } # 权重[root@server2 conf]# systemctl reload nginx1234567891011121314151617181920212223242526272829303132334353637383940411 # 访问哪个域名就调度哪个模块 location / { root /www1; index index.html; proxy_pass http://westos; } # 访问哪个域名就调度哪个模块 location / { root /www2; index index.html; proxy_pass http://redhat; } # 权重[root@server2 conf]# systemctl reload nginx1234567891011121314151617181920212223242526272829303132334353637383940411 # 访问哪个域名就调度哪个模块 location / { root /www1; index index.html; proxy_pass http://westos; } # 访问哪个域名就调度哪个模块 location / { root /www2; index index.html; proxy_pass http://redhat; } # 权重[root@server2 conf]# systemctl reload nginx1234567891011121314151617181920212223242526272829303132334353637383940411 # 访问哪个域名就调度哪个模块 location / { root /www1; index index.html; proxy_pass http://westos; } # 访问哪个域名就调度哪个模块 location / { root /www2; index index.html; proxy_pass http://redhat; }

正文

Apache与nginx的区别

apache

  1. 进程,稳定
  2. 模块超多,基本想到的都可以找到
  3. 少bug ,nginx 的bug 相对较多

nginx

  1. 线程,快,不稳定。多线程是共享的,一个线程出问题,其他的也会受牵连。
  2. 7层调度,反向代理能力强。CDN这块nginx也用的多
  3. 轻量级,同样起web 服务,比apache占用更少的内存及资源
  4. 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
  5. 高度模块化的设计,编写模块相对简单
  6. 社区活跃,各种高性能模块出品迅速啊
  7. 自带健康检查

反向代理

正向代理:服务器不知道用户是谁
用浏览器访问 http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。
A同学去找马云爸爸借钱,马云没有借,经过一番消息打探,原来A同学的大学老师王老师是马云的同学,于是A同学找到王老师,托王老师帮忙去马云那借500万过来,当然最后事成了。不过马云并不知道这钱是A同学借的,马云是借给王老师的,最后由王老师转交给A同学。这里的王老师在这个过程中扮演了一个非常关键的角色,就是代理,也可以说是正向代理,王老师代替A同学办这件事,这个过程中,真正借钱的人是谁,马云是不知道的,这点非常关键。
反向代理:用户不知道服务器是谁
反向代理一般部署在中心机房,用户首先访问的是反向代理服务器,再由反向代理服务器请求真正的服务器。获得结果后将结果返回给用户。同时会将次内容缓存,当其他用户再次访问时,就可以命中
缓存,直接将结果返回给用户,就不会请求真实服务器。提高相应速度。
1.拿10086来说,当你想要人工办理移动业务时,拨打10086(10086这个号码就相当于反向代理服务器),进行业务的过滤分类后,你将被分配到真正主管该业务的话务员(相当于真正的服务器)
2.cdn主要解决地理距离上造成的访问延迟高的情况。一般部署在网络提供商的机房。
通常情况下,当访问大型企业时,由于客户所在地址离企业的服务器的距离不同,有些客户距离比较近,有些客户距离比较远,那么距离远的客户访问企业服务器时,客户端数据会经过层层路由,最终访问企业服务器的延时就会相当高,这无疑拉低用户体验。
所以企业一般会在不同地方租用一个服务器来当时缓存企业服务器上的内容,当用户访问企业服务器时,会首先访问企业租用的距离用户较近的这台服务器上的缓存,当租用的服务器上有用户所需的信
息,直接返回数据,达到加速的目的,这就是通常所说的cnd加速。

nginx源码编译

rewrite ,比nginx 的rewrite 强大

动态页面
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多

超稳定

先关闭集群避免影响

[root@server1 ~]# pcs cluster stop --all
server2: Stopping Cluster (pacemaker)...
server1: Stopping Cluster (pacemaker)...
server1: Stopping Cluster (corosync)...
server2: Stopping Cluster (corosync)...
[root@server1 ~]# pcs cluster disable --all
server1: Cluster Disabled
server2: Cluster Disabled
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
[root@server2 ~]# ls
nginx-1.18.0.tar.gz
[root@server2 ~]# tar zxf nginx-1.18.0.tar.gz 
[root@server2 ~]# ls
nginx-1.18.0  nginx-1.18.0.tar.gz
[root@server2 ~]# cd nginx-1.18.0/
[root@server2 nginx-1.18.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@server2 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module    #  ssh用的ssl协议     --prefix默认安装目录
checking for OS
 + Linux 3.10.0-957.el7.x86_64 x86_64
checking for C compiler ... not found

错误一:./configure: error: C compiler cc is not found #缺少gcc编译器

[root@server2 nginx-1.18.0]# yum install -y gcc

错误二:./configure: error: the HTTP rewrite module requires the PCRE library. #缺少pcre库 ##缺少什么库一般在后面加个-devel

[root@server2 nginx-1.18.0]# yum install -y pcre-devel

错误三:./configure: error: SSL modules require the OpenSSL library.

[root@server2 nginx-1.18.0]# yum install -y openssl-devel

[root@server2 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module

Configuration summary

  • using system PCRE library
  • using system OpenSSL library
  • using system zlib library # zlib 是ssl的依赖 用来压缩
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
[root@server2 nginx-1.18.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@server2 nginx-1.18.0]# ll Makefile # 记录编译时指定的参数,加的模块
-rw-r--r-- 1 root root 376 Aug  8 13:48 Makefile
[root@server2 nginx-1.18.0]# make  #编译是在当前目录中把源码编译成二进制程序
[root@server2 nginx-1.18.0]# make install   # copy二进制程序到指定的目录
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[root@server2 nginx-1.18.0]# du -sh
27M	.
[root@server2 nginx-1.18.0]# du -h /root/nginx-1.18.0.tar.gz 
1016K	/root/nginx-1.18.0.tar.gz
[root@server2 nginx-1.18.0]# cd /usr/local/nginx/
[root@server2 nginx]# ls
conf  html  logs  sbin
[root@server2 nginx]# du -sh
5.8M	.
[root@server2 nginx]# cd sbin/
[root@server2 sbin]# ls
nginx
[root@server2 sbin]# ./nginx -v
nginx version: nginx/1.18.0
[root@server2 sbin]# ./nginx
[root@server2 sbin]# netstat -antlp|grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      12228/nginx: master 
tcp6       0      0 :::8000                 :::*                    LISTEN      3178/httpd       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

nginx优化

[root@server2 ~]# cd nginx-1.18.0/
[root@server2 nginx-1.18.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@server2 nginx-1.18.0]# cd auto/
[root@server2 auto]# ls
cc          feature       headers  install  module   options  stubs    types
define      have          include  lib      modules  os       summary  unix
endianness  have_headers  init     make     nohave   sources  threads
[root@server2 auto]# cd cc
[root@server2 cc]# ls
acc  bcc  ccc  clang  conf  gcc  icc  msvc  name  owc  sunc
[root@server2 cc]# vim gcc
# debug
#CFLAGS="$CFLAGS -g"    #注释掉,我们不需要debug,有debug会占内存更大

[root@server2 cc]# cd
[root@server2 ~]# cd nginx-1.18.0/
[root@server2 nginx-1.18.0]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src
[root@server2 nginx-1.18.0]# cd src/
[root@server2 src]# ls
core event http mail misc os stream
[root@server2 src]# cd core/
[root@server2 core]# vim nginx.h

define NGINX_VER "nginx/" # 删除版本号,安全

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
[root@foundation4 ~]# curl -I www.jd.com
HTTP/1.1 302 Moved Temporarily
Server: nginx      # 没有显示版本号
Date: Thu, 13 Aug 2020 06:00:22 GMT
Content-Type: text/html
Content-Length: 138
Connection: keep-alive
Location: https://www.jd.com/
Access-Control-Allow-Origin: *
Timing-Allow-Origin: *
X-Trace: 302-1597298422195-0-0-0-0-0
Strict-Transport-Security: max-age=360
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

设置成systemd启动方式

[root@server2 ~]# cd /usr/lib/
[root@server2 lib]# ll -d /lib
lrwxrwxrwx. 1 root root 7 Aug  4 11:28 /lib -> usr/lib
[root@server2 lib]# cd systemd/
[root@server2 systemd]# cd system
[root@server2 system]# vim nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
[root@server2 logs]# killall nginx
[root@server2 logs]# systemctl  start nginx
[root@server2 logs]# pwd
/usr/local/nginx/logs
[root@server2 logs]# ls
access.log  error.log  nginx.pid
[root@server2 logs]# systemctl daemon-reload    #刷新
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

nginx实现负载均衡

[root@server2 logs]# cd ..
[root@server2 nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@server2 nginx]# cd conf/
[root@server2 conf]# ls
fastcgi.conf            koi-utf             nginx.conf           uwsgi_params
fastcgi.conf.default    koi-win             nginx.conf.default   uwsgi_params.default
fastcgi_params          mime.types          scgi_params          win-utf
fastcgi_params.default  mime.types.default  scgi_params.default
[root@server2 conf]# ll nginx.conf      # nginx主配置文件
-rw-r--r-- 1 root root 2656 Aug  8 13:53 nginx.conf
[root@server2 conf]# vim nginx.conf 

user nobody; # 默认情况下这个程序以nobody的身份执行

worker_processes 1; # worker数量和cpu核心数量相同,不知道可以设置成auto

[root@server2 conf]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
[root@server2 conf]# vim nginx.conf 

12 events { #时间
13 worker_connections 65535; # 每个worker并发连接数 #应用
14 }

  • 1
  • 2
  • 3
  • 4
  • 5

kernel > systemctl > app
应用的最大连接数肯定不会大于系统和内核的,写的比系统大了也没用,内核和系统的最大连接数就是限制。内核的最大连接数和内存有关,无法更改

[root@server2 conf]# sysctl -a|grep file    # 内核
fs.file-max = 97765
fs.file-nr = 1312	0	97765
fs.xfs.filestream_centisecs = 3000
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"

[root@server2 conf]# useradd -M -d /use/local/nginx -s /sbin/nologin nginx

-M:不创建用户的家目录 -d 指定家目录 -s : 登陆的shell

[root@server2 conf]# vim /etc/security/limits.conf #系统

热插拔模块,即改即生效

nginx - nofile 65535 ## - 软线和硬线都一样

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

nginx的负载均衡是通过反向代理实现的

[root@server2 conf]# vim nginx.conf
##定义:

http { #超文本传输协议
upstream westos{
server 172.25.4.3; ## 支持端口映射,不设置默认80
server 172.25.4.4;
}

include       mime.types;
default_type  application/octet-stream; 

通过uptream定义一个名为westos的负载均衡器,在负载均衡器里有两个RS

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

使用:

 40 
 41     server {            #一个server语句块就是一个虚拟主机,针对www.westos.org
 42         listen       80;
 43         server_name  www.westos.org;    # 负载均衡可能针对某一个域名
 44 
 45         #charset koi8-r;
 46 
 47         #access_log  logs/host.access.log  main;
 48 
 49         location / {
 50             proxy_pass http://westos;       #负载均衡
 51             index  index.html index.htm;
 52         }
 53 

[root@server2 conf]# systemctl reload nginx

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

测试:

[root@server1 ~]# curl 172.25.4.2
vm4
[root@server1 ~]# curl 172.25.4.2
vm3
[root@server1 ~]# curl 172.25.4.2
vm4
[root@server1 ~]# curl 172.25.4.2
vm3

[root@server1 ~]# vim /etc/hosts

172.25.4.2 server2 www.westos.org

[root@server1 ~]# curl www.westos.org
vm4
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm4
[root@server1 ~]# curl www.westos.org
vm3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
[root@server2 conf]# vim nginx.conf

20 server 172.25.4.3 weight=2; # 权重

[root@server2 conf]# systemctl reload nginx

  • 1
  • 2
  • 3
  • 4
  • 5

测试:

[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm4
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

hash函数

[root@server2 conf]# vim nginx.conf

17 http {
18
19 upstream westos{
20 ip_hash; # hash函数,定向到一个server
21 server 172.25.4.3;
22 server 172.25.4.4;
23 }

[root@server2 conf]# systemctl reload nginx

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

测试:

[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

nginx自带健康检查

[root@server3 ~]# systemctl stop httpd     
## server3关闭http服务,nginx检测到就不会分配给server3了
  • 1
  • 2

测试:

[root@server1 ~]# curl www.westos.org
vm4
[root@server1 ~]# curl www.westos.org
vm4
[root@server1 ~]# curl www.westos.org
vm4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[root@server3 ~]# systemctl start httpd
## 启动server3就会再次加入到调度列表
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
[root@server1 ~]# curl www.westos.org
vm3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

nginx应用

[root@server2 conf]# mkdir /www1
[root@server2 conf]# echo www1 >  /www1/index.html
[root@server2 conf]# mkdir /www2
[root@server2 conf]# echo www2 >  /www2/index.html
  • 1
  • 2
  • 3
  • 4
[root@server2 conf]# vim nginx.conf
server {
    listen       80;
    server_name  www1.westos.org;         # 访问哪个域名就调度哪个模块
    location / {        # location:定位数据目录
            root /www1;
            index index.html;
    }

}

server {
    listen       80;
    server_name  www2.westos.org;

    location / {
            root /www2;
            index index.html;
    }
}

}

[root@server2 conf]# systemctl reload nginx

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
[root@foundation4 ~]# vim /etc/hosts

172.25.4.2 server2 www1.westos.org www2.westos.org www.westos.org

  • 1
  • 2
  • 3

网页测试:

www1.westos.org 
www2.westos.org 
www.westos.org            #负载均衡
访问哪个域名就调用哪个模块
  • 1
  • 2
  • 3
  • 4
[root@server2 conf]# vim nginx.conf

http {

    upstream westos{
    server 172.25.4.3;
    server 172.25.4.4;
    }

    upstream redhat{
    ip_hash;
    server 172.25.4.3;
    server 172.25.4.4;
    }



server {
    listen       80;
    server_name  www1.westos.org;

    location / {
    #       root /www1;
    #       index index.html;
            proxy_pass http://westos;
    }

}

server {
    listen       80;
    server_name  www2.westos.org;

    location / {
    #        root /www2;
    #        index index.html;
            proxy_pass http://redhat;
    }
}

}

[root@server2 conf]# systemctl reload nginx

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

网页测试:

www1.westos.org    #负载均衡
www2.westos.org    #hash
  • 1
  • 2

与[转帖]nginx源码编译及优化相似的内容:

[转帖]nginx源码编译及优化

Apache与nginx的区别 apache: 进程,稳定模块超多,基本想到的都可以找到少bug ,nginx 的bug 相对较多 nginx: 线程,快,不稳定。多线程是共享的,一个线程出问题,其他的也会受牵连。7层调度,反向代理能力强。CDN这块nginx也用的多轻量级,同样起web 服务,比a

[转帖]Nginx源码编译安装

https://www.cnblogs.com/lizexiong/p/15012713.html Nginx 是一款优秀的开源软件,支持在 FreeBSD、Linux、Windows、macOS 等多种操作系统平台下编译及运行。CentOS 拥有良好的系统结构和工具软件生态环境,是一款基于 Lin

[转帖]Nginx优化与防盗链

目录 一、配置Nginx隐藏版本号1、第一种方法修改配置文件2、第二种方法修改源码文件,重新编译安装 二、修改Nginx用户与组三、配置Nginx网页缓存时间四、实现Nginx的日志分割五、配置Nginx实现连接超时六、更改Nginx运行进程数七、配置Nginx实现网页压缩功能八、配置Nginx防盗

[转帖]5.Nginx常遇问题入坑出坑整理

https://cloud.tencent.com/developer/article/2129777?areaSource=105001.10&traceId=zTlrks12HlQGZpAUZE_y4 0x00 Nginx 安装与编译 1.在Ubuntu系统上进行Nginx源码编译安装时指定了–

[转帖]Nginx(5):进程绑定CPU:从nginx源码里给你刨功能出来

https://cloud.tencent.com/developer/article/1886150?from=article.detail.1767994&areaSource=106000.11&traceId=akXSS578NgvCLH6Eiqbla 希望打开这篇对你有所帮助。 文章目录

[转帖]nginx的ip_hash算法

概念 根据用户请求的ip,利用算法映射成hash值,分配到特定的tomcat服务器中。主要是为了实现负载均衡,只要用户ip固定,则hash值固定,特定用户只能访问特定服务器,解决了session的问题。 源码分析 ip_hash算法的处理代码位于src\http\modules\ngx_http_u

[转帖]探索惊群 ③ - nginx 惊群现象

https://wenfh2020.com/2021/09/29/nginx-thundering-herd/ nginx kernel 本文将通过测试,重现 nginx(1.20.1) 的惊群现象,并深入 Linux (5.0.1) 内核源码,剖析惊群原因。 1. nginx 惊群现象 2. 原因

[转帖]【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档

本章介绍如何使用NGINX Plus和NGINX开放源代理和负载平衡TCP和UDP流量。 目录 介绍先决条件配置反向代理配置TCP或UDP负载平衡被动健康监控 选择负载平衡方法配置会话持久性 主动健康监控 怎么运行的先决条件基本配置微调健康检查使用匹配配置块进行微调健康检查 TCP的微调健康检查UD

[转帖]nginx版本对比

https://www.cnblogs.com/lizexiong/p/15003543.html Nginx(发音同“engine x”)是一个高性能的反向代理和 Web 服务器软件,最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年,其源代码基于双条款

[转帖]nginx版本对比

https://www.cnblogs.com/lizexiong/p/15003543.html Nginx(发音同“engine x”)是一个高性能的反向代理和 Web 服务器软件,最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年,其源代码基于双条款