nginx入门知识
Nginx 零基础入门指南:从安装到实战,前端后端都能看懂
开篇:写给所有想入门Nginx的同学
很多同学第一次接触Nginx,都会被「反向代理」「负载均衡」「异步非阻塞」这些词劝退——这都是什么东西?我一个前端/后端开发,为什么要学这个?
别慌,这篇文章就是为零基础的你准备的。不管你是前端还是后端,我都会用最通俗的大白话,把Nginx讲明白,让你的阅读体验像德芙巧克力一样丝滑,看完不仅能懂,还能直接上手用。
先给大家吃个定心丸:Nginx一点都不复杂,它的核心功能就那么几个,安装简单、配置简洁,却是互联网项目里无可替代的一环。
一、Nginx 到底是什么?
先看网上最常见的专业定义:
Nginx 是一款轻量级的 HTTP 服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的 IO 性能,时常用于服务端的反向代理和负载均衡。
是不是看完更懵了?没关系,我们先把这些术语全丢掉,用大白话讲清楚。
先搞懂两个基础概念
在讲Nginx之前,你只需要先分清两个东西:
- Web服务器(HTTP服务器):专门负责接收用户的网络请求,然后把结果返回给用户。就像餐厅的前台接待,客人来了先接需求,再把需求转给后厨,最后把做好的菜端给客人。常见的有Nginx、Apache、IIS。
- 应用服务器:专门跑业务代码、处理核心逻辑的服务器。就像餐厅的后厨,前台把客人的点单传过来,后厨负责炒菜、做饮品,做完再交给前台。常见的有Tomcat、Node.js服务、Java服务、Python服务。
现在你就能懂了:Nginx就是一个性能超强、超轻量的Web服务器。
它是俄罗斯人伊戈尔·赛索耶夫在2004年开发的,最初是为俄罗斯访问量第二的Rambler.ru站点做的,经过二十多年的发展,已经成了全球最主流的Web服务器之一。
用一句话总结Nginx的核心特点
- 轻量小巧:占用内存极少,启动速度毫秒级;
- 并发能力拉满:异步非阻塞的设计(和Node.js的设计思路一模一样),能同时扛住几万甚至几十万的并发请求;
- C语言开发:性能极强,稳定性超高;
- 扩展性极强:第三方插件生态极其丰富,想实现什么功能基本都有现成的方案;
- 互联网项目标配:百度、阿里、腾讯、京东、字节等几乎所有你知道的大厂,架构里都有Nginx的身影。
二、为什么前端后端都必须学Nginx?
先给大家看一组数据:全球约有三分之一的网站都在用Nginx,在国内高流量的互联网项目里,Nginx的使用率几乎是100%。
它不是运维专属的技能,而是后端的必修课,更是前端进阶的必经之路。
对后端同学来说
Nginx是服务端架构的第一道门,不管你是做Java、Go还是Node.js,项目上线必然要用到Nginx。反向代理、负载均衡、动静分离、接口限流、HTTPS配置,这些都是后端开发绕不开的内容。
对前端同学来说
掌握Nginx,能让你彻底跳出「页面仔」的局限:
- 前端项目打包上线,需要Nginx做静态资源托管;
- 本地开发跨域问题,Nginx反向代理是最通用的解决方案;
- 前端性能优化,Nginx的gzip压缩、缓存配置、资源合并,是成本最低、效果最明显的优化手段;
- 理解了Nginx,你才能站在更高的视角设计系统架构,而不是只局限在浏览器里的代码。
一句话总结:不管前端后端,Nginx都是你职场进阶的必备技能,早学早受益。
三、从零开始:Nginx 安装与基础操作
Nginx的安装极其简单,不同操作系统都有一键安装的方式,我们分最常用的Mac和Linux系统来讲。
(一)Mac系统:用Homebrew一键安装
Mac上最推荐用Homebrew安装,它就像前端的npm/yarn,一条命令就能搞定安装、卸载、启动、停止,全程不用管依赖和路径。
1. 先安装Homebrew(已安装可跳过)
如果你的Mac还没装Homebrew,先在终端执行这条命令:
1 | |
关于Homebrew的完整用法,可参考:Homebrew介绍和使用
2. 安装/卸载Nginx
1 | |
3. 验证安装是否成功
安装完成后,在终端执行:
1 | |
如果输出了Nginx的版本号(比如nginx version: nginx/1.25.3),就说明安装成功了。
4. Mac上Nginx的核心路径
- 安装目录:
/usr/local/etc/nginx/ - 默认配置文件:
/usr/local/etc/nginx/nginx.conf - 静态资源默认目录:
/usr/local/var/www/
(二)Linux系统:apt/yum一键安装
Linux系统(Ubuntu/Debian/CentOS)安装更简单,系统包管理器直接就能装:
1 | |
Linux上Nginx的核心路径
- 安装目录:
/etc/nginx/ - 主配置文件:
/etc/nginx/nginx.conf - 站点配置目录:
/etc/nginx/sites-available/(所有站点配置)、/etc/nginx/sites-enabled/(已启用的站点配置)
这里给大家讲一个Linux上Nginx的经典设计:
sites-available:存放所有站点的配置文件,不管这个站点要不要启用;sites-enabled:只存放需要启用的站点配置,都是指向sites-available里配置文件的软链接。
比如你新增了一个站点nas.cszy.top,想启用它,只需要执行这行命令:
1 | |
想停用站点,直接删除软链接即可,不会删掉原配置文件,管理起来极其方便。
(三)Nginx 常用操作命令
不管是Mac还是Linux,这些核心命令都是通用的,记得权限不足时加sudo:
| 命令 | 作用 | 适用场景 |
|---|---|---|
nginx |
启动Nginx服务 | 首次安装后启动服务 |
nginx -s stop |
快速停止Nginx | 强制关闭服务,不管有没有正在处理的请求 |
nginx -s quit |
优雅停止Nginx | 等当前所有请求处理完再关闭,生产环境推荐用这个 |
nginx -s reload |
热重启/重载配置 | 修改配置文件后,不重启服务就能让新配置生效,生产环境必备 |
nginx -t |
校验配置文件语法 | 修改配置后,先执行这个命令检查有没有语法错误,避免配置写错导致服务挂掉 |
nginx -v |
查看Nginx版本 | 验证安装是否成功 |
pkill -9 nginx |
强制杀死Nginx进程 | 服务卡死,常规命令停不掉时使用 |
重点提醒:每次修改完Nginx配置,一定要先执行
nginx -t检查语法,确认没问题再执行nginx -s reload重载配置,这是生产环境避坑的第一准则!
四、Nginx 核心配置入门
很多同学觉得Nginx配置复杂,其实它的配置结构极其清晰,核心就几个块,我们先搞懂最基础、最常用的部分。
配置文件的基本结构
Nginx的主配置文件nginx.conf,核心层级是这样的:
1 | |
是不是瞬间清晰了?我们用大白话翻译一下:
- 当Nginx收到一个请求,先看请求的端口和域名,匹配到对应的
server块; - 再看请求的URL路径,匹配到
server块里对应的location块; - 最后按照
location里的配置,处理这个请求(返回静态文件/转发到后端服务/拒绝访问等)。
举个最简单的例子:当你访问localhost:8080,Nginx会匹配到上面的server块,再匹配location /,然后去html目录里找index.html,把这个文件返回给浏览器。
这就是Nginx最核心的配置逻辑,90%的场景,都是围绕server和location块来写的。
官方文档参考:
- 英文原版:nginx.org/en/docs/
- 中文文档:www.nginx.cn/doc/
五、Nginx 四大核心应用场景(附实战配置)
这部分是Nginx的核心,也是大家最关心的内容。我会用生活例子+大白话+可直接复制的配置,把每个场景讲透,看完你就能直接用到项目里。
场景一:动静分离
先搞懂什么是动静分离
我们先把网站的资源分成两类:
- 静态资源:HTML、CSS、JS、图片、视频、字体文件等。这些文件不会变,用户请求的时候,直接把文件返回就行,不用跑业务逻辑。就像餐厅里的瓶装饮料,提前备好,客人点了直接拿。
- 动态资源:接口请求、数据查询、业务逻辑处理等。这些请求需要后端服务跑代码、查数据库,才能返回结果。就像餐厅里的现炒菜,客人点了后厨才能做。
动静分离,就是让专业的人做专业的事:
- 静态请求,直接由Nginx处理,从它的静态资源目录里把文件返回给用户,不用再转给后端服务;
- 动态请求,Nginx再转发给后端的应用服务器(Node.js/Java/Go等)处理。
动静分离的好处
- 大幅减轻后端服务器压力:后端不用再处理静态资源请求,只需要专注写业务逻辑、处理接口,能省出大量性能;
- 前后端分离开发:前端代码打包后直接放在Nginx上,后端只需要提供接口,前后端可以并行开发、互不干扰,联调效率大幅提升;
- 提升静态资源访问速度:Nginx处理静态资源的性能,比任何后端应用服务器都强,还能配合gzip压缩、缓存策略,让用户打开页面的速度更快。
实战配置示例
1 | |
这个配置直接就能用:前端项目打包后放在/usr/local/var/www/my-project里,后端服务跑在8002端口,Nginx会自动区分静态和动态请求,完美实现动静分离。
参考资料:nginx动静分离的好处
场景二:反向代理
这是Nginx最核心的功能,也是大家最容易搞混的概念,我们先彻底搞懂「反向代理」和「正向代理」的区别。
先搞懂:什么是反向代理?
我用大家最熟悉的「代购」举例子,一秒就能懂:
- 你想买一个国外的东西,自己买不了,于是找了一个代购。你把钱和需求给代购,代购去国外帮你买回来,再把东西交给你。
- 这个过程里,你只需要对接代购,完全不用管代购是从哪个店、哪个渠道买的;卖家也只知道是代购买的,不知道最终是你买的。
反向代理,就是这个代购的角色:
- 用户的请求先发给Nginx(代购),Nginx再把请求转发给后端的应用服务器(海外店铺),后端服务处理完,把结果给Nginx,Nginx再返回给用户。
- 用户全程只和Nginx打交道,不知道背后有多少台后端服务、分别跑在哪个端口;后端服务也只接收Nginx的请求,不会直接暴露给用户。
反向代理的核心作用
- 保障服务安全:后端应用服务器不会直接暴露在公网,所有请求都要经过Nginx这一层,我们可以在Nginx里做权限控制、拦截恶意攻击、屏蔽非法IP,相当于给后端服务加了一层防护盾;
- 实现跨域:前端最头疼的跨域问题,用Nginx反向代理一行配置就能解决,是最通用、最稳定的跨域方案;
- 是负载均衡的基础:后面要讲的负载均衡,就是在反向代理的基础上实现的。
最简单的反向代理配置
1 | |
配置完重载Nginx,你访问localhost:8080,和直接访问localhost:8000的效果完全一样。这就是最基础的反向代理模型,所有复杂的反向代理配置,都是在这个基础上扩展的。
反向代理的应用极其广泛,我们平时用的CDN服务,就是反向代理最经典的场景之一。
场景三:负载均衡
先搞懂:什么是负载均衡?
还是用生活例子:一家奶茶店,周末人特别多,只有1个收银台,客人排起了长队,点单要等半小时。老板一看不行,赶紧又开了3个收银台,4个收银台一起接单,客人瞬间就不用排队了。
这个过程里,「把客人均匀分配到各个收银台,避免单个收银台压力过大」,就是负载均衡。
对应到我们的系统里:
- 业务量小的时候,一台后端服务器就够了;但随着用户越来越多,一台服务器扛不住了,我们就会多部署几台服务器,组成一个服务器集群。
- Nginx就是那个「大堂经理」,用户的请求先到Nginx,它会按照我们配置的规则,把请求均匀地分配给集群里的每一台服务器,避免单台服务器压力过大宕机。
负载均衡的核心作用
- 分摊集群压力:把海量的用户请求,分散到多台服务器上处理,大幅提升系统的并发承载能力;
- 保障服务高可用:Nginx自带健康检查功能,会定期给集群里的服务器发请求,检查服务是否正常。如果某一台服务器挂了,Nginx就不会再把请求发给它,只会把请求分给正常的服务器,用户完全感知不到有服务出问题了;
- 实现灰度发布:可以给不同的服务器设置权重,让小部分请求走新版本服务,大部分请求走旧版本,验证没问题再全量更新,极大降低上线风险。
参考资料:什么是集群(cluster)
实战负载均衡配置
最基础的轮询负载均衡配置,直接就能用:
1 | |
配置完成后,你访问localhost:8080,Nginx会把请求轮流发给8000和8001端口的服务,完美实现负载均衡。
常用的负载均衡策略
Nginx内置了多种负载均衡策略,满足不同的业务需求:
- 轮询(默认):请求按顺序轮流分配给集群里的服务器,每台服务器分到的请求数量基本一致,适合所有服务器配置差不多的场景;
- 权重轮询:给服务器设置不同的权重,权重越高,分到的请求越多。比如配置
server localhost:8000 weight=3; server localhost:8001 weight=1;,就是每4个请求里,3个给8000,1个给8001,适合服务器配置有差异的场景; - IP哈希(ip_hash):根据用户的IP地址计算哈希值,同一个IP的用户,永远只会访问同一台后端服务器。完美解决session共享的问题,适合需要登录态的系统;
- 最少连接(least_conn):把请求分给当前连接数最少的服务器,避免某台服务器堆积太多请求,适合请求处理时间差异大的场景。
场景四:正向代理
搞懂了反向代理,正向代理就特别好理解了,它俩正好是反过来的。
还是用代购的例子:反向代理是「代理后端服务,对用户透明」,而正向代理是「代理客户端,对服务端透明」。
- 你找代购买东西,店主只知道是代购买的,不知道是你买的——代购代理的是你(客户端),这就是正向代理。
- 你找代购买东西,你只知道找代购,不知道东西是哪家店买的——代购代理的是店铺(服务端),这就是反向代理。
再举个最常见的例子:我们用的VPN/科学上网工具,就是典型的正向代理。
- 你想访问国外的网站,直接访问不了,于是你连接了VPN。你的请求先发给VPN服务器,VPN服务器去访问国外的网站,再把内容返回给你。
- 国外的网站只知道是VPN服务器访问的它,不知道是你访问的;全程你只需要对接VPN服务器,不用管网站能不能访问。
正向代理的核心定义:代理服务器位于客户端和目标服务器之间,客户端指定要访问的目标服务器,代理服务器转发请求并返回结果,目标服务器感知不到真实客户端的存在。
正向代理的应用场景没有反向代理广泛,主要用于VPN、内网穿透、客户端访问控制等场景,入门阶段大家只需要搞懂它和反向代理的区别就够了。
六、写在最后
这篇文章里,我们从Nginx是什么、为什么要学,到安装、基础命令、核心配置,再到四大核心应用场景,把Nginx入门的所有核心内容都讲透了。
很多同学觉得Nginx高深,其实它的核心逻辑特别简单:接收请求,匹配规则,处理请求,返回结果。所有复杂的配置,都是在这个基础上做的扩展。
对于入门来说,你不需要记住所有的配置指令,只需要搞懂核心逻辑,知道什么场景用Nginx的什么功能,具体的配置用的时候查文档就可以了。
最后给新手同学两个学习建议:
- 实践出真知:本地装一个Nginx,跟着文章里的配置敲一遍,改一改参数,重载看看效果,比看十遍文章都管用;
- 先会用,再深入:先把常用的动静分离、反向代理、负载均衡用熟,再去研究更复杂的功能,循序渐进,才是最高效的学习方式。
希望这篇文章,能帮你彻底推开Nginx的大门。