news 2026/2/13 12:09:23

【NGINX 介绍与安装】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【NGINX 介绍与安装】

文章目录

  • 前言
  • 一、NGINX 是什么?
  • 二、为什么选择 NGINX?
  • 三、安装 NGINX
    • 1. 使用包管理器安装
    • 2. 从源码编译安装
  • 四、NGINX 基本配置与工作原理
    • 1. 主要配置文件结构
    • 2. 核心指令块
    • 3. 工作进程与事件模型
  • 五、反向代理
    • 1. 基本反向代理示例
    • 2. 路径转发与重写
  • 六、负载均衡
    • 1. 轮询(默认)
    • 2. 最少连接(least_conn)
    • 3. IP 哈希(ip_hash)
    • 4. 权重(weight)
    • 5. 健康检查
  • 七、缓存与加速
    • 1. 反向代理缓存
    • 2. 静态文件缓存
    • 3. Gzip 压缩
  • 八、SSL/TLS
    • 1. 基本 SSL 配置
    • 2. 安全头部
    • 3. 限流与防护
  • 九、日志与监控
    • 1. 日志配置
    • 2. 简易状态监控
  • 十、NGINX 高级特性
    • 1. WebSocket 代理
    • 2. gRPC 代理
    • 3. Lua 扩展(OpenResty / ngx_lua)
    • 4. 动态模块
    • 5. HTTP/2 与 HTTP/3 支持
    • 6. 反向代理上传大文件

前言

NGINX 因其高并发、低内存消耗和丰富功能,已成为 Web 服务器、反向代理和负载均衡器中的佼佼者。


一、NGINX 是什么?

NGINX(Engine X)是一款高性能、高并发、开源的 HTTP 服务器,同时也可用作反向代理、负载均衡、邮件代理(IMAP/POP3)等。由 Igor Sysoev 于 2004 年开发,旨在解决 C10k(处理上万个并发连接)问题。

  • 事件驱动架构:采用异步非阻塞的事件驱动模型,在高并发场景下表现优异,内存消耗相对较低。
  • 模块化设计:核心功能加上多种可选模块,用户可以编译所需模块,或使用动态模块。
  • 广泛应用:很多大型网站(如 Netflix、Airbnb、GitHub、腾讯、阿里等)都在使用 NGINX 作为前端网关或负载均衡器。

当客户端发来大量并发请求时,NGINX 的事件模型可以高效地调度网络 I/O,避免线程/进程过多导致的上下文切换开销。


二、为什么选择 NGINX?

  • 高并发处理能力:事件驱动使其能处理数万并发连接,资源利用效率高。
  • 低内存消耗:相比传统进程/线程模型,内存使用更可控。
  • 灵活的反向代理和负载均衡功能:支持多种负载均衡算法(轮询、IP 哈希、最少连接等)及健康检查。
  • 丰富的缓存支持:可做静态资源缓存、反向代理缓存,提升响应速度并减轻后端压力。
  • 易于扩展:通过第三方模块(如 Lua、Image Filter、GeoIP2 等)满足不同需求。
  • 稳定成熟:社区活跃,文档丰富,生态完善。

三、安装 NGINX

1. 使用包管理器安装

以 Ubuntu/Debian 为例:

sudoaptupdatesudoaptinstall-y nginx

安装后,服务通常自动启动。使用以下命令检查状态:

sudosystemctl status nginx

在 CentOS/RHEL:

sudoyuminstall-y epel-releasesudoyuminstall-y nginxsudosystemctlenable--now nginx

2. 从源码编译安装

# 安装依赖sudoaptupdatesudoaptinstall-y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev# 下载 NGINX 源码(以 1.24.0 为例)wgethttp://nginx.org/download/nginx-1.24.0.tar.gztarzxvf nginx-1.24.0.tar.gzcdnginx-1.24.0# 配置编译选项(可根据需求添加模块或路径)./configure\--prefix=/usr/local/nginx\--with-http_ssl_module\--with-http_v2_module\--with-stream\--with-stream_ssl_module\--with-http_gzip_static_module# 编译并安装makesudomakeinstall# 启动sudo/usr/local/nginx/sbin/nginx

四、NGINX 基本配置与工作原理

1. 主要配置文件结构

  • 主配置文件:nginx.conf,通常位于/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf
  • 其他配置:常将虚拟主机配置放在conf.d/sites-available/sites-enabled/目录中。
  • 日志文件:access_logerror_log设置在配置文件内。

2. 核心指令块

  • events {}:设置事件模型,如worker_connections
  • http {}:HTTP 功能及模块配置,包括server{}upstream{}proxy_*gzip等。
  • stream {}:TCP/UDP 流量代理,用于非 HTTP 协议负载均衡(如数据库、MQ 代理)。
  • mail {}:邮件代理配置(IMAP/POP3/SMTP)。

3. 工作进程与事件模型

  • worker_processes: 通常设置为 CPU 核心数或 auto。
  • worker_connections: 每个 worker 可处理的并发连接数。
  • 异步事件驱动:使用 epoll/kqueue 等高效 I/O 多路复用。

五、反向代理

NGINX 常用作反向代理,将请求转发到后端应用服务器。

1. 基本反向代理示例

http { upstream backend { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 5s; proxy_read_timeout 30s; } } }
  • upstream定义后端服务器组。
  • proxy_pass转发请求。
  • 设置请求头确保后端可获知原始请求信息。

2. 路径转发与重写

  • location /api/ { proxy_pass http://backend/api/; }

  • 使用rewrite做 URL 重写:

    location /old/ { rewrite ^/old/(.*)$ /new/$1 permanent; }

六、负载均衡

1. 轮询(默认)

upstream backend { server 192.168.0.101; server 192.168.0.102; server 192.168.0.103; }

请求按顺序分配,简单易用。

2. 最少连接(least_conn)

upstream backend { least_conn; server 192.168.0.101; server 192.168.0.102; }

将请求发给当前活动连接数最少的后端,适合请求时间差异大的场景。

3. IP 哈希(ip_hash)

upstream backend { ip_hash; server 192.168.0.101; server 192.168.0.102; }

根据客户端 IP 分配后端,保证同一客户端请求分配到同一后端,有助于会话粘性。

4. 权重(weight)

upstream backend { server 192.168.0.101 weight=3; server 192.168.0.102 weight=1; }

对后端分配比例进行控制,资源更强的服务器可配置更高权重。

5. 健康检查

  • NGINX 开源版需借助第三方模块(如 nginx-upstream-check-module);NGINX Plus 原生支持健康检查。

  • 或通过配置proxy_next_upstream、超时等,简单应对后端异常:

    proxy_connect_timeout 2s; proxy_read_timeout 5s; proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;

七、缓存与加速

1. 反向代理缓存

http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; server { listen 80; server_name example.com; location / { proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_bypass $cookie_nocache $arg_nocache; add_header X-Cache-Status $upstream_cache_status; proxy_pass http://backend; } } }
  • proxy_cache_path配置缓存存储位置和大小。
  • proxy_cache_valid设置不同响应码的缓存时长。
  • proxy_cache_bypass控制绕过缓存。
  • 在响应头中添加X-Cache-Status便于调试。

2. 静态文件缓存

对于静态资源,可利用expiresadd_header Cache-Control

location ~* \.(js|css|png|jpg|jpeg|gif|svg)$ { root /var/www/static; expires 7d; add_header Cache-Control "public"; }

3. Gzip 压缩

http { gzip on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; }

通过压缩减少传输体积,加快加载。


八、SSL/TLS

1. 基本 SSL 配置

使用 Let’s Encrypt 生成证书(示例工具 certbot),并在 NGINX 中配置:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://backend; ... } }
  • 强制 HTTP 跳转到 HTTPS。
  • 开启 HTTP/2 提升多路复用性能。

2. 安全头部

add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self';" always;

帮助防止点击劫持、MIME 类型混淆等问题。

3. 限流与防护

  • 限制连接数、请求速率:

    http { limit_conn_zone $binary_remote_addr zone=addr:10m; limit_req_zone $binary_remote_addr zone=req:10m rate=5r/s; server { ... location /login { limit_conn addr 1; limit_req zone=req burst=10 nodelay; proxy_pass http://backend; } } }
  • 防止恶意请求:可结合 fail2ban、WAF(如 ModSecurity、OpenResty+Lua 规则)等。


九、日志与监控

1. 日志配置

  • access_log:记录请求信息,可自定义格式:

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn;
  • 通过日志分析工具(如 GoAccess、ELK、Fluentd)进行流量趋势、错误率分析。

2. 简易状态监控

在配置中开启:

server { listen 127.0.0.1:8081; server_name localhost; location /nginx_status { stub_status on; allow 127.0.0.1; deny all; } }

访问http://127.0.0.1:8081/nginx_status,得到活动连接、请求计数等信息。可配合 Prometheus 的 nginx-exporter 采集指标,或自定义脚本定期抓取。


十、NGINX 高级特性

1. WebSocket 代理

location /ws/ { proxy_pass http://backend_ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; }

支持实时通信应用。

2. gRPC 代理

http { upstream grpc_backend { server 127.0.0.1:50051; } server { listen 80 http2; location / { grpc_pass grpc://grpc_backend; } } }

3. Lua 扩展(OpenResty / ngx_lua)

借助 Lua 脚本进行动态处理、ACL、灰度发布等:

server { location /lua { content_by_lua_block { ngx.say("Hello from Lua!") } } }

4. 动态模块

许多第三方模块可以按需编译成动态模块并通过load_module引入,如ngx_brotlingx_pagespeed等。

5. HTTP/2 与 HTTP/3 支持

  • HTTP/2 可提高多路复用效率;HTTP/3(QUIC)需在较新版 NGINX 或使用第三方 patch/模块支持。
  • 在生产中,可根据客户端支持情况逐步部署 HTTP/2;HTTP/3 目前生态仍在发展,可视需求尝试。

6. 反向代理上传大文件

设置较大client_max_body_size

http { client_max_body_size 100m; }

并调整相关超时,确保上传稳定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 7:19:40

U-Mamba终极教程:从零开始掌握医学影像分割神器

U-Mamba是一个革命性的深度学习框架,专门为生物信息学和医学影像分析领域设计。它结合了稀疏状态模型(SSM)和卷积神经网络的优势,在3D医学影像分割任务中表现出卓越的性能。本教程将带你从零开始,完整掌握这个强大的开…

作者头像 李华
网站建设 2026/2/11 16:51:07

优雅通知弹窗的终极解决方案:iziToast完全指南

优雅通知弹窗的终极解决方案:iziToast完全指南 【免费下载链接】iziToast Elegant, responsive, flexible and lightweight notification plugin with no dependencies. 项目地址: https://gitcode.com/gh_mirrors/iz/iziToast iziToast是一款优雅、响应式、…

作者头像 李华
网站建设 2026/2/12 4:31:33

2、英文写作中的语言与标点使用规范

英文写作中的语言与标点使用规范 在英文写作里,无论是日常交流、学术写作还是专业文档撰写,语言表达的准确性和规范性都至关重要。下面将为大家详细介绍英文写作中关于缩写词、动名词与分词、数字与数词、代词、技术缩写词与首字母缩写词、计量单位以及标点符号的使用规范。…

作者头像 李华
网站建设 2026/2/7 21:10:45

13、技术文档编写全解析

技术文档编写全解析 在技术领域,文档的编写至关重要,它能帮助用户更好地理解和使用产品。下面将详细介绍技术文档的各个部分、不同类型的技术文档以及编辑在文档编写中的作用。 1. 典型手册各部分的编辑格式 典型手册的各部分通常按照特定顺序排列,以下是各部分的详细介绍…

作者头像 李华
网站建设 2026/2/10 18:21:04

面试常考:如何原地重排数组?这个思路绝了

解题思路 这道题我们用两个指针分别追踪奇数位和偶数位,每次检查最后一个元素是奇数还是偶数,然后把它交换到对应的位置上。 比如最后一个元素是奇数,就把它换到下一个需要填充的奇数位(1, 3, 5…),换过来的元素又成为新的"最后一个元素",继续这个过程。 这样做的优势…

作者头像 李华
网站建设 2026/2/2 7:12:50

Wi-Fi CERTIFIED Multimedia™ (WMM®) 技术概述

1.0 概述 本文档定义了 WMM 的规范,WMM 是基于 IEEE 802.11e 标准补充 [2] 的 802.11 QoS 实现方案。最初提出 WMM 是为了防止因多个不兼容的 802.11e 预标准子集出现而导致的碎片化问题;部署 WMM 将为 802.11 语音、流媒体等服务提供可用的 QoS 功能。 1.1 参考文献 [1] …

作者头像 李华