牛皮!几张图就把Nginx剖析的明明白白
Nginx 是一个采用主从架构的 Web 服务器,可用于反向代理、负载均衡器、邮件代理和 HTTP 缓存。

图片来自 Pexels
Relax,在这篇文章里,我会先带你理解 Nginx 的架构和专有术语,最后实践一把安装和配置 Nginx。

代理 vs 反向代理
代理
下面让我用示意图讲解下:

反向代理
同样的来看下示意图:

因此,在上面的例子中,客户端其实并不知道在与哪个后端服务器进行交互。
负载均衡
又是枯燥的一个名词:负载均衡,不过它很好理解,因为负载均衡本身就是反向代理的一个实例。
来看看负载均衡和反向代理的本质区别。在负载均衡中,你必须有 2 个或者更多的后端服务器,但在反向代理中,多台服务器不是必需的,甚至一台后端服务器也能运作。
我们再深入点,如果我们有很多来自客户端的请求,负载均衡器会检查每个后端服务器的状态,均匀地分配请求,更快地向客户端发送响应。
有状态 vs 无状态应用
Okay,在我们开始实践 Nginx 之前,先搞清所有的基本知识!
有状态应用
有状态应用存了一个额外变量,只用来保存服务器中单个实例使用所需的信息。

无状态应用
无状态应用有更多的数据库 API 调用,但当客户端与不同后端服务器的交互时,无状态应用却存在更少的问题。

没明白?简单来说,如果我通过 Web 服务器从客户端向后端服务器 server1 发送请求,它将向客户端返回一个令牌,用于任何进一步的访问请求。
客户端可以使用令牌并向 Web 服务器发送请求。此 Web 服务器将请求连同令牌一起发送到任意后端服务器,而每个后端服务器都能提供相同的所需结果。
Nginx 是什么?
Nginx 是网络服务器,到目前为止,我的整个博客一直在用这个网络服务器。老实说,Nginx 这就像个中间人。

这个图不难理解,它是目前为止所有概念的一个组合。在这里,我们有 3 个后端服务器运行在 3001、3002 和 3003 端口,这些后端服务器都能访问同一个运行在 5432 端口的数据库。
知识储备完成!到这里,你对 Nginx 是什么以及 Nginx 所涉及的术语有了一个清晰的理解。是时候,了解安装和配置技术了。
开始安装 Nginx
时机到了,如果你了解了上面的概念,可以动手开始 Nginx 实践了。

嗯,Nginx 的安装过程对任何系统来说都很简单。我是一个 Mac OSX 用户,所以例子的命令是基于 macOS 的, Ubuntu、Windows 和其他 Linux 发行版操作和例子类似。
$?brew?install?Nginx
运行 Nginx 如此简单,要检查 Nginx 是否运行也很简单。
$?nginx?
#?OR?
$?sudo?nginx
执行上面指令,再打开浏览器并输入 http://localhost:8080/ 回车查看下,你会看到以下画面!

Nginx 基本配置 & 示例
下面,我们通过实操来感受下 Nginx 的魔力。
首先,在本地创建如下的目录结构:
.
├──?nginx-demo
│??├──?content
│??│??├──?first.txt
│??│??├──?index.html
│??│??└──?index.md
│??└──?main
│????└──?index.html
└──?temp-nginx
??└──?outsider
????└──?index.html
我的系统中有 vim,所以在这里用 vim 来更改 Nginx 配置,你可以用自己的编辑器来修改配置。
$?cd?/usr/local/etc/nginx
$?vim?nginx.conf
上面的命令会打开一个 Nginx 默认配置文件,我真的不想直接使用默认配置。因此,我通常的做法是复制这个配置文件,然后对主文件进行更改。这里也不例外。
$?cp?nginx.conf?copy-nginx.conf
$?rm?nginx.conf?&&?vim?nginx.conf
①添加配置的基本设置。一定要添加 events {},因为在 Nginx 架构中,它通常用来表示 worker 的数量。在这里我们用 http 告诉 Nginx 我们将在 OSI 模型的第 7 层作业。
http?{
??server?{
????listen?5000;
????root?/path/to/nginx-demo/main/;?
????}
}
events?{}
http?{
??server?{
??????listen?5000;
??????root?/path/to/nginx-demo/main/;?
??????location?/content?{
??????????root?/path/to/nginx-demo/;
??????}???
??????location?/outsider?{
??????????root?/path/temp-nginx/;
??????}
??}
}
events?{}
③接下来,我们在主服务器上编写一个规则来防止任意 .md 文件被访问。我们可以在 Nginx 中使用正则表达式,因此我们将这样定义规则:
??location?~?.md?{
????????return?403;
??}
④最后,让我们学习下 proxy_pass 命令来结束这个章节。我们已经了解了什么是代理和反向代理,在这里我们从定义另一个运行在 8888 端口上的后端服务器开始。现在,我们在 5000 和 8888 端口上运行了 2 个后端服务器。
server?{
????listen?8888;
????location?/?{
????????proxy_pass?http://localhost:5000/;
????}
????location?/new?{
????????proxy_pass?http://localhost:5000/outsider/;
????}
}
看下,这是所有的配置信息:
http?{
????server?{
????????listen?5000;
????????root?/path/to/nginx-demo/main/;?
????????location?/content?{
????????????root?/path/to/nginx-demo/;
????????}???
????????location?/outsider?{
????????????root?/path/temp-nginx/;
????????}
????????????????location?~?.md?{
??????????return?403;
????????}
????}
??????server?{
????????listen?8888;
????????location?/?{
????????????proxy_pass?http://localhost:5000/;
????????}
????????location?/new?{
????????????proxy_pass?http://localhost:5000/outsider/;
????????}
??}
}
events?{}
其他 Nginx 命令
$?nginx?
#OR?
$?sudo?nginx
$?nginx?-s?reload
#OR?
$?sudo?nginx?-s?reload
$?nginx?-s?stop
#OR?
$?sudo?nginx?-s?stop
$?ps?-ef?|?grep?Nginx
$?kill?-9?<PID>
#OR?
$?sudo?kill?-9?<PID>
编辑:陶家龙
出处:转载自公众号 HelloGitHub(ID:GitHub520)

精彩文章推荐:
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中央经济工作会议在北京举行 7904699
- 2 紧急提醒:请在日中国公民进行登记 7807939
- 3 中央定调明年继续“国补” 7714618
- 4 “九天”无人机成功首飞 7618059
- 5 断崖式降温!今冬最强寒潮来了 7524293
- 6 中央经济工作会议释信号:3件事不做 7427055
- 7 中国“空中航母”首飞成功 7333244
- 8 《时代》周刊2025年度人物公布 7238092
- 9 人民空军中日双语发文:大惊小怪 7141972
- 10 寒潮来袭 “速冻”模式如何应对 7042102







51CTO技术栈
