1. Nginx 简介#


在现代 Web 架构中,Nginx 往往是流量到达服务器的第一道门面。它兼具极高的吞吐能力与轻量资源消耗,常用于静态站点分发与后端服务网关接入。

1.1 什么是 Nginx#

Nginx 是一款开源、高性能的 HTTP 服务器与反向代理服务器,核心架构基于单 Master 多 Worker 的异步非阻塞事件驱动模型(Linux 环境下使用 epoll)。

其核心能力:

  • 静态资源直出:高效托管 HTML、CSS、JS 及各类多媒体文件,直接经由内核零拷贝响应,释放后端算力。
  • 反向代理与流量分发:作为内部集群的前置入口,对外暴露统一端口,无感转发后端请求。
  • 虚拟主机路由:支持基于单个端口配置多个域名(Server Name),实现单机多站点的精细隔离。
  • 平滑热升级:内置优秀的信号处理机制,修改配置与更新二进制无需停机,实现零感知运维。

 

2. Nginx 安装与启动#


2.1 包管理器安装#

(1) 系统包管理器(推荐日常使用)

Ubuntu / Debian

1sudo apt update
2sudo apt install -y nginx

CentOS / RHEL

1sudo yum install -y epel-release
2sudo yum install -y nginx

macOS

1brew install nginx

(2) 前端/Node.js 包管理器(npm)

适合前端本地快速模拟生产路由与接口代理,无需安装系统级服务:

1npm install -g nginx

2.2 从源码安装(可自定义模块)#

(1) 下载与解压源码

1wget http://nginx.org/download/nginx-1.24.0.tar.gz
2tar -xvzf nginx-1.24.0.tar.gz
3cd nginx-1.24.0

(2) 配置与编译安装

1./configure
2make
3sudo make install

2.3 启动与停止服务#

操作命令
启动服务sudo systemctl start nginx
停止服务sudo systemctl stop nginx
重启服务sudo systemctl restart nginx
检查状态sudo systemctl status nginx

 

3. 基本命令#


命令描述
nginx -v查看已安装版本
nginx -V查看版本及详细编译参数模块
nginx -t检验配置文件语法与合法性
nginx -s reload平滑热重载配置(不中断当前连接)
nginx -s stop快速强制终止进程
nginx -s quit优雅退出(等待请求处理完成)
nginx -s reopen重新打开日志(配合日志轮转切割)

 

4. 配置文件结构与解析#


4.1 配置文件路径#

  • 主配置文件:/etc/nginx/nginx.conf(源码编译版通常位于 /usr/local/nginx/conf/nginx.conf)
  • 模块化子配置:/etc/nginx/conf.d/*.conf
  • 默认工作目录:/usr/share/nginx/html

4.2 配置文件结构#

Nginx 配置按作用域分层嵌套生效:

配置块作用域与核心职责
main全局顶层配置,控制运行用户、Worker 进程数、系统日志等。
events网络连接模型控制,配置单个 Worker 的最大连接数及 epoll。
httpHTTP 协议核心层,承载 MIME 类型、连接超时、Gzip 及虚拟主机。
server虚拟主机单元,声明绑定的监听端口与域名。
location路由规则分发,定义 URI 路径的具体匹配与响应行为。

4.3 配置文件基础示例#

默认配置文件路径:/etc/nginx/nginx.conf

 1user nginx;                             # 运行 Worker 进程的系统用户
 2worker_processes auto;                  # 自动根据 CPU 核心数分配 Worker 进程数
 3
 4events {
 5    worker_connections 1024;           # 单个 Worker 进程支持的最大并发连接数
 6}
 7
 8http {
 9    include /etc/nginx/mime.types;      # 引入 MIME 类型映射文件
10    default_type application/octet-stream; # 默认响应类型
11    sendfile on;                       # 开启高效文件零拷贝传输机制
12    keepalive_timeout 65;              # 长连接超时时间(秒)
13
14    include /etc/nginx/conf.d/*.conf;  # 加载 conf.d 目录下的所有模块化子配置
15
16    server {
17        listen 80;                     # 监听 HTTP 默认 80 端口
18        server_name localhost;         # 绑定的域名或主机名
19
20        location / {
21            root /usr/share/nginx/html; # 站点静态资源根目录
22            index index.html index.htm; # 默认首页文件名
23        }
24    }
25}

 

5. 常见实战应用#


在前后端分离架构中,Nginx 最典型的职责组合是:对外托管前端页面,对内反向代理后端接口

5.1 反向代理#

目标:将所有发往 /api/ 的接口请求,无感转发给后端的业务服务(如 Spring Boot 的 8080 端口),并保留真实的客户端来源信息。

 1server {
 2    listen 80;
 3    server_name localhost;
 4
 5    location /api/ {
 6        proxy_pass http://127.0.0.1:8080/;   # 转发至后端内网端口
 7        proxy_set_header Host $host;         # 透传客户端原始请求域名
 8        proxy_set_header X-Real-IP $remote_addr; # 透传客户端直连 IP
 9        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
10    }
11}

核心说明

  • proxy_pass 尾部斜杠差异
    • 带 /(如 http://127.0.0.1:8080/):Nginx 会去除匹配到的 /api/ 前缀再转发。
    • 不带 /(如 http://127.0.0.1:8080):完整保留 /api/… 原路径转发。
  • 透传请求头必要性:反向代理重新发起了 TCP 握手,后端默认只能拿到 Nginx 的本地 IP(127.0.0.1)。必须显式配置 proxy_set_header,后端的业务审计、地理位置解析和限流防刷才能拿到真实 IP。

5.2 监听 HTTP 端口#

目标:对外开放 HTTP 访问端口,并根据请求携带的 Host 域名将流量路由到对应的站点虚拟主机。

1server {
2    listen 80;                 # Nginx 监听 80 端口,浏览器直接访问 http://localhost 即可命中
3    server_name localhost;     # 请求的 Host 满足匹配条件时进入该 server 处理
4
5    location / {
6        root /usr/share/nginx/html;
7        index index.html;
8    }
9}

核心说明

  • listen:指定该虚拟主机绑定的网络端口(如 80、443)或指定网卡 IP(如 127.0.0.1:8080)。
  • server_name:虚拟主机的域名标识。当单台机器上运行多个站点时,Nginx 会依据 HTTP 请求头中的 Host 字段与 server_name 进行匹配并分发;未匹配上的请求会默认由排在首位或带有 default_server 标记的配置处理。

5.3 静态资源托管#

目标:履行 Web 服务器核心职责,直接从本地目录读取并返回网页静态资源;同时利用 try_files 保障单页应用(Vue / React SPA)在前端路由模式下刷新页面不报 404。

 1server {
 2    listen 80;
 3    server_name localhost;
 4
 5    location / {
 6        root /usr/share/nginx/html;          # 指定前端构建产物所在的本地目录
 7        index index.html;                    # 默认首页入口
 8        try_files $uri $uri/ /index.html;   # Vue/React 路由刷新防 404 兜底
 9    }
10}

核心说明

  • Web 服务器核心职责:负责监听 HTTP 端口,接收浏览器请求并直接经由内核零拷贝响应网页静态内容。
  • root 根路径:指定静态资源的物理根目录,请求 URI 路径会被完整拼接到 root 目录后进行文件检索。
  • try_files 运行逻辑:按请求路径执行链路兜底检索:真实静态文件 ($uri) → 同名目录 ($uri/) → 兜底重定向返回 /index.html(交由前端单页路由引擎渲染,彻底杜绝 404)。

 

6. 总结与延伸#


Nginx 凭借单 Master 多 Worker 的事件驱动架构,在现代 Web 体系中牢牢占据着第一道流量关卡的位置。

这份基础入门配置看似简单,却覆盖了前后端分离架构中最核心的骨架场景:

  • 静态层:通过文件零拷贝高效直出,利用 try_files 为单页应用提供路由兜底;
  • 代理层:屏蔽内部真实架构细节,无感将 /api 等接口流量分发到后端微服务集群;
  • 运维层:依托信号驱动机制,让每一次 nginx -s reload 都能平滑热更新,保证线上服务永续运行。

延伸阅读
掌握了基础的代理与托管后,在真实的公网运营中往往还需要考虑静态资产的带宽保护。如果你正在面临资源盗刷问题,可以继续参阅进阶篇:《Nginx配置防盗链》