内容提要
Igor Sysoev于2002年开发了Nginx,以解决C10K问题,并于2004年发布。Nginx以高性能和低资源消耗著称,市场占有率达到35.3%。它支持静态和动态文件服务,配置文件位于/etc/nginx。Nginx的反向代理功能可以将请求转发至后端服务,支持负载均衡和请求处理优化,并通过gzip压缩和缓存提高性能。
延伸解读
反向代理中 Host 头的作用与风险
Nginx 反向代理默认将请求的 Host 头重写为 $proxy_host(即上游服务的主机名)。如果上游服务器在同一 IP 和端口上托管多个虚拟主机,错误的 Host 头可能导致返回错误站点。例如,将 Host 改为客户端请求的域名后,上游可能无法匹配到正确的虚拟主机。因此,需根据上游服务的配置决定是否覆写 Host,避免代理后页面异常。
静态资源引用方式对代理的影响
当上游服务使用绝对路径引用资源(如 /assets/image.png)时,反向代理到子路径(如 /static/)会导致客户端请求错误的路径,因为 Nginx 默认不修改响应内容。解决方案包括:将上游改为相对路径引用、为资源路径单独配置代理、使用独立域名,或启用 ngx_http_sub_module 重写响应内容。选择方案需考虑上游是否可修改及维护成本。
性能调优:Worker 进程与连接数
worker_processes 建议设置为 CPU 核心数(或 auto),过多会导致进程调度开销。worker_connections 定义每个 Worker 能处理的最大连接数,受系统文件描述符限制(ulimit -n)。合理配置可充分利用硬件,避免资源浪费。同时,静态文件缓存和 gzip 压缩能显著减少传输量,但 gzip_comp_level 不宜过高,通常 1-4 即可平衡 CPU 与压缩率。
日志管理:reopen 与清空技巧
直接删除日志文件后,Nginx 仍会向已删除的文件描述符写入,导致新日志丢失。此时需执行 nginx -s reopen 让 Nginx 重新打开日志文件。更简单的方式是使用 echo "" > access.log 清空内容,无需重载。此外,可在 location 中通过 access_log 指令自定义日志路径或关闭日志,便于按需记录。
Q&A
Nginx的开发背景是什么?
Nginx由Igor Sysoev于2002年开发,旨在解决C10K问题,即支持超过10,000个并发请求。
Nginx的反向代理功能有什么优势?
Nginx的反向代理功能可以将请求转发至后端服务,支持负载均衡和请求处理优化,提升性能。
如何安装Nginx?
在Ubuntu上,可以通过命令'sudo apt update && sudo apt upgrade -y'更新源,然后使用'sudo apt install nginx -y'安装Nginx。
Nginx的配置文件通常在哪里?
Nginx的配置文件通常位于/etc/nginx目录中,主配置文件为nginx.conf。
Nginx如何提高性能?
Nginx通过gzip压缩和缓存静态文件来提高性能,减少资源消耗。
Nginx与Apache的主要区别是什么?
Nginx设计为异步、非阻塞和事件驱动,能够更好地处理高并发请求,而Apache则是基于线程和进程的模型。