樱花客栈

Nginx代理基础

常用目录

  • /var/www/html/ 默认的站点目录,供外部访问
  • /etc/nginx/ 配置文件目录:

nginx.conf
Nginx 的核心配置文件,用于设置全局参数(如 worker 进程数、日志路径、PID 文件等)、事件处理模块(events 块)以及 HTTP 服务相关配置,包括 http、server 和 location 等模块。

conf.d/
该目录用于存放扩展配置文件,常用于按站点或功能划分虚拟主机配置。主配置文件中通常通过 include 指令引入该目录下的所有 .conf 文件,实现配置模块化管理。

mime.types
该文件用于定义文件扩展名与 MIME 类型之间的映射关系。Nginx 根据此文件确定响应头中的内容类型,例如将 .jpg 映射为 image/jpeg。

fastcgi_params、uwsgi_params、scgi_params
这些参数文件定义了与 FastCGI、uWSGI、SCGI 等后端通信所需的环境变量,便于 Nginx 在与 PHP、Python 等应用服务器交互时传递请求信息。

  • /usr/share/nginx/ 默认站点目录,最终为页面看到的内容。

/usr/share/nginx/html/ 存放默认站点的index.html、404.html等文件

  • /var/log/nginx 日志目录

代理

正向代理与反向代理的区别:正向代理,客户端通过代理服务器向远程服务器发送请求;反向代理,客户端访问远程服务器,远程服务器将请求再转发至目标可用服务器。

负载均衡:代理多个后端服务器时,Nginx 可按轮询、IP hash 等策略分发请求。

工作原理

Nginx包括基于事件驱动、异步非阻塞的高性能Web服务器架构,擅长处理高并发请求,常用于静态资源服务、反向代理、负载均衡等场景。

Nginx启动一个Master主进程,然后根据配置文件创建一个或多个Worker子进程。Master主进程负责读取配置、管理进程(启动、重载、关闭),只负责“调度管理“。

Nginx采用异步非阻塞的请求处理机制,使其具备高效处理海量并发请求的能力。相比之下,Apache默认采用的工作模式(尽管也提供异步非阻塞版本,但由于与部分内置模块存在兼容性问题而较少使用)会为每个请求分配独立的工作线程。当并发量达到数千级别时,就意味着需要同时维持数千个运行线程。这种设计会给系统带来显著负担:一方面,大量线程会消耗可观的内存资源;另一方面,频繁的线程上下文切换会产生巨大的CPU开销。这些额外的系统资源消耗不仅无法提升性能,反而会成为系统瓶颈。

在 Nginx 中,阻塞式系统调用是大忌。既然不能阻塞,那就必须采用非阻塞的方式——比如某个事件还没准备好,系统调用会立即返回 EAGAIN,告诉你:“别急,数据还没到位,等会儿再来查!”于是,你可以先去做别的事情,过会儿再来检查。虽然这种方式避免了线程阻塞,但需要不断轮询事件状态,仍然存在不小的开销。

于是,更高效的异步非阻塞事件驱动模型应运而生,其核心就是 selectpollepoll(Linux)或 kqueue(BSD)这样的系统调用。它们的共同特点是:

  • 批量监控多个事件:调用时虽然是阻塞的,但可以设置超时时间,期间只要有事件就绪,就会立即返回。
  • 高效的事件管理:以 epoll 为例,未就绪的事件会被注册到 epoll 中,待其就绪后再处理;如果读写时返回 EAGAIN,就重新放回 epoll 等待。这样,程序只需在所有事件都未就绪时才会真正等待,其余时间都在高效处理就绪事件。

这种模式下,虽然单线程在同一时刻只能处理一个请求,但由于采用了事件循环机制,可以在多个请求间快速切换。关键在于:

  • 切换无代价:不同于多线程的上下文切换,Nginx 的切换是主动让出(因事件未就绪),本质上只是循环处理已就绪的事件。
  • 资源占用极低:无需创建线程,每个请求仅消耗少量内存,没有线程切换的开销,使得高并发时不会浪费 CPU 资源。

master-workers的好处

Nginx 采用多进程架构,每个 Worker 进程独立运行,这种设计带来了诸多优势:

  1. 无锁高性能
    • 由于 Worker 进程之间不共享内存,无需加锁,避免了锁竞争带来的性能损耗,同时也降低了编程复杂度和问题排查难度。
  2. 无缝热升级
    • 支持 nginx -s reload 热部署,在不中断服务的情况下更新配置或二进制文件,确保业务持续可用。
  3. 故障隔离,服务不中断
    • Worker 进程之间相互独立,即使某个进程崩溃,也不会影响其他进程,Master 进程会迅速重启新的 Worker,保证服务稳定运行。
    • 虽然异常的 Worker 会导致当前处理的请求失败,但仅影响部分请求,不会造成全局服务中断,降低了整体风险。
  4. 高效请求处理
    • 所有 Worker 进程公平竞争处理请求,即使某个 Worker 异常退出,剩余进程仍能继续处理新请求,确保服务高可用。

这种进程隔离+Master 守护的机制,使得 Nginx 在保持高性能的同时,具备极强的稳定性和容错能力。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注