Nginx 入门详解:从基础配置到高性能实战
本文详解 Nginx 核心概念、安装部署及四大应用场景(静态服务、虚拟主机、反向代理、负载均衡)。涵盖配置文件结构解析、常用命令操作及动静分离最佳实践,帮助开发者快速掌握高性能服务器配置与跨域解决方案。

本文详解 Nginx 核心概念、安装部署及四大应用场景(静态服务、虚拟主机、反向代理、负载均衡)。涵盖配置文件结构解析、常用命令操作及动静分离最佳实践,帮助开发者快速掌握高性能服务器配置与跨域解决方案。

Nginx 是一款由俄罗斯程序员开发的高性能 HTTP 服务器、反向代理服务器,同时也支持 IMAP/POP3 邮件代理,官方测试能支撑5 万并发连接,且运行时对 CPU、内存的消耗极低,稳定性拉满,这也是它能取代传统服务器工具,成为互联网企业标配的核心原因。
很多人会把 Nginx 和 Tomcat 做对比,这里要明确一个核心区别:Nginx 仅能发布静态项目,适合处理 HTML、CSS、JS、图片等静态资源;而 Tomcat 擅长处理 Java Web 这类动态项目。在实际开发中,二者往往搭配使用,这也是后续会讲到的'动静分离'最佳实践。
简单来说,Nginx 就像服务器的'全能管家',既能自己打理静态资源的访问,又能把动态请求转发给专业的后端服务器,还能合理分配请求压力,让整个服务架构更高效、更稳定。
Nginx 的功能强大且实用,核心应用场景主要有四个,覆盖了日常开发和部署的绝大多数需求,新手先掌握这四大场景,就能应对 80% 的使用场景。
这是 Nginx 最基础的功能,它可以独立作为静态资源服务器,直接部署 HTML、CSS、JS、图片、视频等静态文件,访问速度极快。相比其他服务器,Nginx 处理静态资源的效率更高,配置也更简单,是静态网站部署的首选。
简单理解,虚拟主机就是在一台物理服务器上,虚拟出多个独立的网站,每个网站有自己的访问端口或域名,互不干扰。比如个人开发者只有一台服务器,却想部署多个个人网站,用 Nginx 配置虚拟主机就能轻松实现,极大节省了服务器资源。
当网站访问量增大,单台后端服务器无法承载并发请求时,就需要多台服务器组成集群,这时候 Nginx 的反向代理和负载均衡就派上了大用场。
前后端分离开发是现在的主流模式,而浏览器的同源策略会导致跨域请求报错,这是前端开发者的常见痛点。Nginx 可以作为中间层,接收前端的请求,再转发给后端接口,由于服务器之间的请求不受同源策略限制,轻松解决跨域问题,无需后端做复杂的跨域配置。
基于 Nginx 处理静态资源的优势和反向代理功能,衍生出了'动静分离'的最佳实践,这也是企业开发中最常用的架构设计。
Nginx 的安装和启动非常简单,Windows 和 Linux 系统操作类似,这里以 Windows 系统为例,教你快速完成 Nginx 的部署和基础操作,新手也能一步到位。
Nginx 的官方下载地址:http://nginx.org/en/download.html,建议下载Stable version(稳定版),避免开发版的 bug 问题。
下载后是一个压缩包,直接解压即可使用,注意:解压路径中不要包含中文和空格,否则会导致 Nginx 启动失败。解压后会得到一个文件夹,里面包含 Nginx 的所有配置文件、可执行程序和默认站点目录。

解压后的文件夹结构清晰,核心目录和文件一定要记牢,后续的配置和部署都围绕这些目录展开:
| 目录 / 文件 | 核心作用 |
|---|---|
| conf | 存放 Nginx 所有配置文件,核心是 nginx.conf |
| html | Nginx 默认的静态站点目录,存放默认首页和错误页面 |
| logs | 日志目录,包含访问日志(access.log)和错误日志(error.log) |
| temp | 临时目录,存放 Nginx 运行时的临时文件 |
| nginx.exe | Windows 下的可执行程序,用于启动、停止 Nginx |

其中conf/nginx.conf是 Nginx 的主配置文件,日常的所有配置修改(如虚拟主机、反向代理)都在这个文件中进行。
nginx.exe即可,Nginx 是多进程程序,启动后会在后台运行,不会有窗口弹出。验证启动成功:打开浏览器,输入http://localhost或http://localhost:80,如果看到'Welcome to nginx!'的页面,说明启动成功。

双击启动后,若需要停止、重启或检查配置,需要在Nginx 根目录下打开命令行,执行以下核心命令,这是日常使用的高频操作,建议熟记:
start nginxnginx -s stopnginx -s reloadnginx -t重要提示:修改任何 Nginx 配置后,都需要执行nginx -s reload命令,让配置生效,无需重新启动 Nginx。
Nginx 的所有功能都通过配置文件实现,而核心配置文件nginx.conf的结构非常清晰,主要分为四个部分,且存在继承关系:main(全局设置)→http(服务器总配置)→server(虚拟主机/站点配置)→location(URL 匹配配置),还有一个独立的upstream(负载均衡配置),不参与继承。
main{
# (全局设置)
http{
# 服务器
upstream{} # (负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器)
server{ # (主机设置:主要用于指定主机和端口)
location{}# (URL 匹配特点位置的设置)
}
}
}
简单理解配置文件的层级:一个 http 中可以有多个 server(多个站点 / 虚拟主机),一个 server 中可以有多个 location(多个 URL 匹配规则),以下是核心配置的通俗解读,新手重点掌握server和location即可。
server 继承 main, location 继承 server, upstream 即不会继承其他设置也不会被继承
一个 http 中可以放置多个 server 服务,每一个 server 都是一个单独的虚拟主机。

和具体业务无关的基础配置,控制 Nginx 的运行规则,比如工作进程数、日志路径等:
worker_processes 1; # 工作进程数,建议值=CPU 的线程数,最小 1
error_log logs/error.log; # 全局错误日志路径
pid logs/nginx.pid; # Nginx 进程 ID 文件路径
控制 Nginx 的网络连接处理,核心是设置并发连接数:
events {
worker_connections 1024; # 每个工作进程的最大并发连接数,建议 1 万 -5 万
}
所有和 HTTP 服务相关的公共配置,会被所有的 server 继承,比如请求类型、连接保持时间等:
http {
include mime.types; # 引入媒体类型配置,识别 html、css 等文件
default_type application/octet-stream; # 缺省数据类型
sendfile on; # 开启高性能数据处理,提升静态资源访问速度
keepalive_timeout 65; # 客户端与服务器的连接保持时间,单位秒
# 这里可以配置多个 server、upstream
}
单个站点或虚拟主机的独立配置,核心是设置监听端口和主机名,一个 http 中可以配置多个 server,实现多站点部署:
server {
listen 80; # 监听的端口,默认 80,虚拟主机可设置 81、82 等
server_name localhost; # 主机名/域名,可填 localhost、IP 或自定义域名
error_page 500 502 503 504 /50x.html; # 5xx 错误页面跳转
}
server 内部的 URL 匹配规则,当 Nginx 接收到请求时,会根据请求的 URL 匹配对应的 location,然后执行相应的操作(如访问静态资源、转发请求),核心语法:
location 匹配规则 {
执行操作;
}
# 示例:默认根路径匹配
location / {
root html; # 静态资源的根目录,对应 Nginx 的 html 文件夹
index index.html index.htm; # 默认首页,访问根路径时优先加载的文件
}
专门用于配置后端服务器集群,为负载均衡和反向代理提供后端服务器地址,核心语法:
upstream 自定义集群名 {
server 后端服务器 1 地址:端口;
server 后端服务器 2 地址:端口;
}
# 示例:配置 tomcat 集群
upstream tomcat-cluster {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
看懂配置文件后,结合实际应用场景做配置,才能真正掌握 Nginx,以下是四大核心场景的极简配置示例,直接复制修改即可使用,新手也能快速上手。
将静态网站的所有文件(HTML、CSS、JS 等)复制到 Nginx 的html目录下,无需修改默认配置,启动 Nginx 后,访问http://localhost即可直接打开网站。
如果需要部署多个静态网站,可在html下创建子文件夹(如html/blog、html/shop),将对应网站文件放入,访问http://localhost/blog即可。
需求:在一台服务器上,通过 81、82 端口分别部署两个静态网站(校园网、旅游网)。
campus和travel文件夹,分别放入两个网站的静态文件;nginx -t检查配置,无错误后执行nginx -s reload生效;访问测试:http://localhost:81(校园网)、http://localhost:82(旅游网)。

修改nginx.conf,添加两个 server 配置:
http {
# 原有公共配置不变
# 校园网:监听 81 端口
server {
listen 81;
server_name localhost;
location / {
root campus; # 指向校园网文件目录
index index.html; # 默认首页
}
}
# 旅游网:监听 82 端口
server {
listen 82;
server_name localhost;
location / {
root travel; # 指向旅游网文件目录
index index.html; # 默认首页
}
}
}
需求:将 Nginx 的 80 端口请求,转发给本地 8080 端口的 Tomcat 动态项目(旅游网),同时解决前端跨域问题。修改nginx.conf的 server 配置,添加proxy_pass(反向代理目标地址):
http {
# 配置后端 Tomcat 集群(单台也可配置)
upstream tomcat-travel {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat-travel; # 转发请求到后端 Tomcat
index index.html;
}
}
}
配置生效后,访问http://localhost,Nginx 会自动将请求转发给http://localhost:8080的 Tomcat 项目,前端直接请求 Nginx 地址即可解决跨域。

需求:后端有 3 台 Tomcat 服务器(8080、8081、8082),通过 Nginx 实现请求的平均分配,提升并发能力。修改nginx.conf,配置 upstream 集群和反向代理:
http {
# 配置 Tomcat 集群,添加 3 台服务器地址
upstream tomcat-cluster {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat-cluster; # 转发请求到集群
index index.html;
}
}
}
配置生效后,访问http://localhost,Nginx 会默认以轮询的方式,将请求依次分配给 8080、8081、8082 的 Tomcat 服务器,实现负载均衡。
同时打开三个浏览器窗口查看不同端口返回结果。

默认的轮询策略适合后端服务器性能一致的情况,而实际开发中,后端服务器的配置(CPU、内存)往往不同,这时候就需要根据实际情况选择负载均衡策略,Nginx 支持多种策略,核心常用的有以下 4 种:
请求按顺序依次转发给后端服务器,每个服务器的请求次数相同,无需额外配置,适合后端服务器性能一致的场景。
给性能更好的服务器设置更高的权重,权重值越大,接收的请求越多,适合后端服务器性能不一致的场景:
upstream tomcat-cluster {
server 127.0.0.1:8080 weight=1; # 权重 1,接收 1 份请求
server 127.0.0.1:8081 weight=2; # 权重 2,接收 2 份请求
server 127.0.0.1:8082 weight=3; # 权重 3,接收 3 份请求
}
根据客户端的 IP 地址进行哈希计算,将同一个客户端的所有请求转发给同一台后端服务器,实现会话保持,适合需要保存用户会话的场景:
upstream tomcat-cluster {
ip_hash; # 开启 IP 哈希策略
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
Nginx 会将请求转发给当前连接数最少的后端服务器,适合请求处理时间不一致、并发波动较大的场景:
upstream tomcat-cluster {
least_conn; # 开启最少连接数策略
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
很多新手会把正向代理和反向代理弄混,其实二者的核心区别只有一个:代理的对象不同,记住这一点,就能轻松区分。
正向代理是客户端主动配置代理服务器,由代理服务器代替客户端向目标服务器发送请求,目标服务器不知道真实的客户端是谁,只能看到代理服务器的地址。
反向代理是服务器端配置,客户端直接访问代理服务器(Nginx),由代理服务器代替客户端向后端服务器集群发送请求,客户端不知道真实的后端服务器是谁。
一句话总结:代理哪端,就隐藏哪端,正向代理隐藏客户端,反向代理隐藏服务端。
Nginx 作为一款高性能的服务器工具,核心优势在于高并发、低消耗、配置简单、功能全面,从静态资源部署到反向代理,从解决跨域到负载均衡,几乎覆盖了后端部署的所有核心需求。
对于新手来说,无需一开始就深究复杂的配置,先掌握安装启动、核心命令、四大应用场景和基础配置,通过实际操作熟悉后,再逐步学习高级策略(如缓存、SSL 加密、限流)。Nginx 的配置看似繁琐,但核心逻辑非常清晰,只要多练、多试,就能快速掌握,成为后端部署的'得力助手'。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online