Hello 大家好哦

先简单介绍一下我自己吧 , 大米是来自北京的运维架构师一名, 从2004年参加工作至今已经第14年了

岁数确实很大啦 但是 咱们当运维的人永远都保持着年轻的心是最重要的了

有的朋友可能要问大米了, 做运维可以干上这么多个年头吗 , 前景如何啊 待遇怎么样?

[大米心中偷着乐]

这还用问吗?如果前途和待遇不行话 怎么可能一直做这么多年呢 ^_^?

接下来 又有人给大米提出问题了, 请问 运维这一行当 和 开发比起来如何呢?

[闭上眼回顾一下]

其实这个问题仁者见仁智者见智 , 大米不会去争辩,只能说我本人对Linux运维有着比较重的情节,因为薪资不比开发低,且年龄基本不受限制 , 更重要的是,大米比较喜欢涉猎广泛的技术面(这一点在运维中体现的尤其明显)

言归正传 接下来 谈一谈我们的这个专题的宗旨

为什么大米希望能给大家带来一篇NGINX的教程呢? 接下来咱们就如下的几个原因分别的跟大家聊一聊

[通过NGINX了解网站工作流程]

意思就是说,我们并不仅仅只是学习NGINX本身的技术,而是通过NGINX的学习,让你对整体网站的运作模式 乃至企业集群架构 也有一定程度的了解

提到"网站"这个词, 大米就不得不回忆一下曾经的经历了

还记得大米在2004年刚刚参加工作的时候,做的就是嵌入式的WEB C语言 CGI开发(说的直白点 就是在嵌入式主板上 建立一个网站),第一天刚刚报道的时候,主管立刻就把我叫到跟前,跟我说:你目前的任务 就是先搞明白WEB动态网站是怎么回事,然后再搞清楚如何在嵌入式上实现WEB站点. 当时记得真是一脸懵逼啊 ,都不知道说的是啥 ("什么 网站可以用C语言来开发?")后来被主管老张一步一步的指点 才终于明白了 网站是怎么回事,域名DNS是怎么回事 , 动态网站和静态网站又是怎么回事,动静分离是怎么回事,表单提交和CGI又是怎么回事 .. , 就这样一点一点就入门开始写网站代码了

回想起刚刚参加工作时候的情景,真是历历在目。 而最重要的是,经过了十几年后,当初最开始学到的各种关于网站的技术和思路,直到今天 依然在日常工作中发挥着作用,为什么呢?我们在下面一个小节解释

[如今互联网 几乎处处离不开WEB服务器 (NGINX) ]

上个单元 咱们提到了嵌入式上的网站, 关于嵌入式是什么 我们不需要去搞懂它,我们在这里只需要知道 在那个年代 在一个嵌入式小主板上(就是个微型电脑)想要做出一个网站 那真的是难度太大了。

因为在当时的情况下(老式嵌入式环境的限制) 没有办法使用像NGINX 和 PHP(PHP我们以后再讲) 这样方便的软件 来建设网站
所以 可想而知 一个动态网站 需要用C语言去编写(静态和动态两部分)难度可想而知

现如今搭建一个让别人能访问的网站, 最重要的基础前提是什么? 那就是 首先必须得有一个WEB服务器 才可以

那什么是WEB服务器呢?

我们现在 学着脱离一个普通傻瓜用户 而以一个技术人员的思路 来思考一下 平时当我们随时随地打开一个网页浏览的时候 它的背后是怎么实现的吧(其实这也是 作为一个合格的运维技术人员 必须要掌握的学习方法 和思考问题的方式)

首先第一个最容易想到的是, 之所以 一个远端的网页能被你打开浏览, 那至少得先经过网络的传输才可以 对不?

那接下来呢?经过网络传输 那传输的是什么东西?

想象一下 平时咱们每天上下班捧着个手机 , 或者坐在家里电脑前 看着网页上的东东 都有些什么呢?

大量的文字? 各式各样的图片 和 视频 各种按钮 输入框 各种导航条

平时我们在浏览器网页的时候(无论是手机 还是电脑)在网络中传输来传输去的 其实归纳起来 无非就是上面说的这些

这些在网站技术领域中 被赋予了一个专门的词汇 叫做 静态资源(所谓静态资源 人们浏览器网页 最直观看到 感受到的)

虽然这些都被称作静态资源 但是他们的类型并不一样, 而在网络中传输的时候 又必须得借助一种统一的规范作为载体
(就好比是 很多种不同的货物 想要运送度过一条河到对岸 必须都要统一放入一搜货船中)

这个载体的名字 大家一定很熟悉 那就是HTTP协议 没错 之所以你能看得到网页中各种内容 都是它从中给你充当翻译

所谓的服务器 服务器, 那必须得能给从远处访问过来的用户 提供服务才可以 不是么?

这个服务 在咱们当下说的网站领域中,指的就是HTTP协议的处理, 一个能处理HTTP协议的软件 我们就称作 一个WEB服务器
这就是我们即将要学习的NGINX

然而实事求是的说,技术领域中的 WEB服务器 其实并不止NGINX一个 , 其他的还有很多哦 例如 APACHE ,Tomcat , Lighthttpd 等等

但是你要知道的是, 技术浩瀚如海 我们的精力和时间有限, 学同一类型技术的时候 我们就挑选 最火的最有前途的 技术学

[谈谈服务器是什么概念]

通过之前的章节 我们知道了 NGINX其实就是一个有能力 解析和翻译HTTP协议的软件,让我们可以通过浏览器(WEB)网上冲浪 正是由于它能对外(指的是咱们上网用户) 提供这种"服务", 所以 我们又称作它为 WEB服务器

在这一个章节中 我们需要给大家再把一个概念搞清楚 那就是 "服务器"

说到"服务器" 其实它包含了两层的含义 一个是指 像NGINX这样 对外提供服务的 持续运作的软件
(这种对外提供服务的软件 和我们平时自己用的软件有很大的不同, 通常自己用的软件 比如一个游戏软件 一个杀毒软件 一个计算器 这种都是个人软件,顾名思义就是给个人 给自己提供服务 自己拿着用 , 而像NGINX这种服务类的软件, 它可不是只给一个人自己使用的哦, 而是为了给成千上万的人提供某些功能 所以 这一点我们要搞清楚)

第二个含义 指的就是 硬件的服务器

NGINX的功能很强大 很稳定 持续不断的给访问网站的用户服务 提供和解析资源, 但是NGINX毕竟是个软件啊 它总不可能自己凭空着运行吧。

所以它必须依赖一个 稳定的运行的实体载体, 这就是硬件服务器。 硬件服务器 可以理解为 就是功能更强大的计算机, 本质并没有什么不同,只不过 它和一般家用PC电脑或者笔记本 比较起来,是专门为了长久稳定高速运行 而制定的
(服务器和PC电脑的关系, 就跟上面咱们提过的 个人软件和服务类软件 的关系很贴近, 就是服务个人 和服务一群人的区别)

另外 光有NGINX 和 服务器 还不足以开始假设我们的网站,其中还缺少一个非常重要的环节,那么就是操作系统啊!

NGINX这种服务类软件 + 实体服务器 + 稳定的操作系统(LINUX,运维工程师必备的技能,下个篇幅我们再学习) 这三样就组成了我们搭建一个网站(最简单的静态网站 , 什么是动态网站 我后面再讲)的最基本的条件了

[为什么NGINX这么重要? 因为网站的概念 其实是可以无限延伸扩展的 ]

在这个章节中,我们讨论一个非常重要的概念,那就是网站概念的延伸 这里不是很好理解 一定要自习的阅读!

咱们之前说了好多的篇幅, 感觉一直都是在谈论网站 网站 网站. 难道就只有在 搭建一个"网站"的时候 NGINX才派上用场嘛?

首先 大米给大家提出一个问题,请大家好好想想, 我们平时 所谓的上网 连网 就仅仅是浏览网页 没别的了?

请问你 手机没有用过导航 ? 有没有叫过外卖,有没有玩过手游? 有没有用过各种社交类软件撩妹过?

我很负责任的告诉你 当你使用这些功能的软件的时候, NGINX一样无处不在 都在默默的为你提供者服务

那说到这里 大家可能会有一个疑问了

咦? 平时使用手机导航,或者玩手游的时候, 我可没有打开什么浏览器哦 ,这跟“网站”应该丝毫无关吧, 为什么也都会使用NGINX?

如果要解释这个问题,我们就回到上上个章节中一起来回顾一下, NGINX的定义是什么

NGINX是一个专门搭建"网站"的服务器? NO NO NO!~~ 大米可不是这么说的哦

大米告诉大家的是, NGINX是一个高性能处理"HTTP协议" 的服务软件

这里的关键就在"HTTP协议上", 这里其实是一个包含不化等号的关系 希望大家可以理解好

网站 必须依赖HTTP协议 才能浏览
但是依赖HTTP协议浏览的 可不见得是网站哦

其实现在 互联网在我们的日常生活中 凡是用于给用户展示的 或者说 最贴近咱们用户的部分 使用的大多数都是HTTP协议
(技术架构中,我们称作 WEB前端 几乎清一色使用HTTP协议 作为入口,而相应的还有后端技术(就不再是HTTP协议了),这些目前不懂没关系 我们以后的章节还会再讲解)

既然到处都是HTTP协议, 而且互联网的流量又是那么巨大,所以像NGINX这种 以高性能稳定运行解析HTTP协议的软件 一统天下 就是大势所趋了
(就目前来说 APACHE作为 WEB服务器的老大哥 依然占据着最多的市场份额, 但是 由于NGINX的上升速度实在太快,取而代之成为第一 也就是几年的事)

[知识成主干 你学到的不仅仅是NGINX ]

凡是看过大米讲运维相关课程的同学都清楚, 我从来讲究的都是 独木不成林 知识之间必须形成链路 最终成主干这样的思路

上线一个专栏《生产框架下的Nginx》的目的 不光是让你掌握一个NGINX相关知识, 而是通过这一门课程 可以让你进入到运维架构思路之中 学会如何让知识形成体系

这种知识成体系的能力 才是我们最终所追求 就好比 你学英语天天就被单词 而不去大量读文章 了解国外文化 和通俗说法 就算你背下来10万个单词 也没有用处

接下来 就跟随大米老师 一起通过NGINX 进入知识的海洋吧 ^_^