Nginx:互联网上每三个网站就有一个在跑它

nginx 在 GitHub 上拿到了 30,306 Star。

从 2004 年发布到现在,nginx 支撑了全球超过三分之一的网站流量。Web 服务器、反向代理、负载均衡、API 网关、内容缓存:一个软件全干了。BSD 协议开源,免费。

正文顶部截图

1、 Master-Worker 进程模型

nginx 不和 Apache 比谁更占内存。它的架构是 Master 进程带一群 Worker。

Master 管配置、管 Worker 生命周期。Worker 负责干活:处理 HTTP 请求。Worker 数量可以自动匹配 CPU 核数,8 核机器跑 8 个 Worker,负载摊到每个核上。

多 Worker 之间通过共享内存同步数据。举个例子:限流场景需要统计某客户端在时间段内的访问次数,所有 Worker 读写同一块共享内存,不需要引入外部缓存。一个单机 nginx 能扛几十万并发连接,不是什么黑科技,就是进程模型切得合理。

2、 功能都在模块里

nginx 核心很小,功能靠模块堆。

HTTPS?ngx_http_ssl_module。负载均衡?ngx_http_upstream_module。限流?ngx_http_limit_req_module。

从 1.9.11 开始支持动态模块。不用重新编译,下载后加载就行。njs(用 JavaScript 扩展 nginx)就是动态模块的例子。当然也可以静态编译进去,看场景需要。

拿到二进制后,nginx -V 看一下所有内置模块,心里有数。

3、 不写代码,写配置

nginx 的行为全由配置文件控制。一种叫 Directives 的参数定义了所有行为:

  • 代理请求到哪个后端
  • 负载均衡用轮询还是最少连接
  • 每秒允许多少次请求
  • 静态文件缓存多久
  • SSL 证书放哪个路径

改完配置,nginx -s reload,不停机热加载。对于线上服务来说,这个操作很实用。

配置文件结构像一棵嵌套的树:最外层是全局配置,往里依次是 events、http、server、location。刚开始会觉得层级多,习惯之后发现这和实际部署逻辑一致:一台服务器,多个域名,不同 URL 路径,匹配到不同处理规则。

README区域截图

4、 Stable 和 Mainline 怎么选

nginx 同时维护两个分支。

Stable 是稳定版,只合入 Mainline 上验证过的关键修复。Mainline 从 master 构建,新功能先落地。生产环境用 Stable,测试环境用 Mainline,官方推荐这个策略。升级走包管理器,不需要手动下载。

5、 从源码编译

想自己编译?三步:

# 基础依赖
sudo apt install gcc make libpcre3-dev zlib1g-dev

# 如需 HTTPS
sudo apt install libssl-dev

# 编译安装
auto/configure
make
sudo make install

编译后的二进制在 objs/nginx,安装到 /usr/local/nginx/。跑起来后 curl localhost,返回 “Welcome to nginx!” 说明装好了。

Windows 版本目前是概念验证阶段,官方建议只用于开发和测试。

`,返回 “Welcome to nginx!” 说明装好了。

Windows 版本目前是概念验证阶段,官方建议只用于开发和测试。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐