剩下的一些配置指令没有大的归属,不过也有一些是比较常见的,这部分内容学习完成之后,整个 http 模块相关的核心基础配置指令就全部学习完成了。今晚可以举杯庆祝一下了,咱们远程干杯。但是,还是要泼个冷水哦,咱们的学习还有很长的路要走。如果你看过 Nginx 的官方文档,就会知道仅仅是 HTTP 模块本身,就还有一大堆核心模块之外的模块。
今天学习的内容也比较简单,主要的是 Types 相关的配置,另外还会了解一下 AIO 以及部分没有特别大的分类归属的配置指令的使用。后面的内容都是 HTTP 核心模块中比较小或者比较简单的部分了。有很多配置项其实我们平常并不常用,甚至很多在学习之前我都不知道有它们的存在。做为扩展知识眼界来说,非常有意义,也能够学习到很多之前并不了解或者概念模糊的内容。
浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置,这一块也是 HTTP 的基础知识。之前我们就一直在强调,学习 Nginx 需要的就是各种网络相关的基础知识,其中更重要的就是 HTTP 和 TCP 相关的内容。另外一个 try_files 配置指令也是 Nginx 中非常常用的一个指令,用于找不到指定的路径文件时,可以去按顺序查找备用的一些文件路径,非常实用。
继续我们的 HTTP 核心模块之旅。今天主要是文件相关的一些处理操作,包括 DirectIO、文件缓存以及 sendfile 相关的配置。这三个配置中,大家应该会见过 sendfile ,但是另外两个就比较少见了。包括我之前也从来没见过,不过还好,DirectIO 并不是一个完全的陌生人,文件缓存优化也与操作系统基础知识有关,而 sendfile 一般默认就是开启的,所以大家也不要有太大的压力哦。
对于一个请求来说,请求行、请求头、请求体共同构成了它的整体。不过如果仅仅是 GET 请求的话,其实一般会忽略掉请求体。但是,现在大部分的伪 RESTful 开发风格,基本上已经变成了全部都是 POST 的天下了。特别是小型公司,不管前后端分离还是小程序、APP,一套 POST 走天下。
对于一个 HTTP 应用来说,最重要的其实就是 HTTP 的两个核心功能,一个是请求,一个就是响应。而对于一个 Web 应用服务器来说,响应通常是静态文件或者是动态程序代码来完成,围绕响应的配置指令大部分以缓存优化为主。从这里也能看出,在 Nginx 这种应用服务中,请求相关的内容会更多一些,因为我们要面对的,要对接的,就是从外部不断发过来的请求。
HTTP 基础知识大家掌握的怎么样呀?对于长连接这一块的内容应该也不是什么新鲜东西了吧。毕竟 HTTP1.1 都已经发布这么久了。今天主要来看的就是长连接相关的配置,另外还会介绍几个和连接有关的内容。同时,今天的内容除了 HTTP 外,还需要一点 TCP 的知识。没办法,毕竟 Ngxin 本身就是一个网络代理服务器软件,离不开的就是各种网络相关的知识。相信大家肯定没问题的,毕竟很早前在短视频中就说过,基础能比我差的程序员估计在全国范围内都找不到几个了。
最最核心的部分学习完了,但其实还有更多的内容要等待着我们探索。今天我们先来看到的就是关于错误页面的设置以及 301、302 跳转相关的内容。这两块内容都有一个特点,那就是页面或明显地,或不明显地产生了跳转变化,显示的都不是本来我们应该要得到的那个链接的页面。
Location 是整个 HTTP 模块中非常重要的一个子模块,它是为某个请求URI(路径)建立配置。这个模块又是属于 Server 模块的子模块,同时它还可以嵌套在另一个 Location 模块下面,因此,它的作用范围是 server 和 location 。其实,说白了,也就是我们可以为指定的一些路径去做一些额外的配置。
第一个重要的子模块就是这个 Server 相关的模块。Server 代表服务的意思,其实就是这个 Nginx 的 HTTP 服务端所能提供的服务。或者更直白点说,就是虚拟主机的配置。通过 Server ,我们可以在同一台服务器上,配置监听不同端口号的 HTTP 应用,配置不同域名解析的 HTTP 服务,并且还可以灵活组合进行各种不同的域名和端口号的配置。这就是 Server 模块的作用。
前面就说过了,HTTP 模块是整个 Nginx 中最核心的模块。在这其中,它又有一部分最核心的模块,其实也就是在编译安装的时候,我们不装任何扩展就自带的模块。这一部分模块就像是基本的 PHP 语法一样,是最基础的,也是我们最需要重点掌握的内容。
基础的核心模块中,事件模块是非常重要的一个部分,但是,它的配置项其实并不多,常见的或者说需要我们去配置的更少。不过本着基础学习和了解的态度,咱们还是要一个个的学习一下。
对于 Nginx 的学习来说,其实最基础的就是学习配置文件中的各种不同配置项。如果想要深入的理解 Nginx ,那就要去研究它的源码,但是就像之前说过的,C 的水平以及整体的计算机基础知识的水平还不足以支撑我达到可以分析 Nginx 源码的程度。因此,咱们就是对各种配置的学习。
对于 Nginx 来说,它不像其它很多别的工具一样,有很多的命令行参数,比如我们刚刚学习完的 Redis 中的 redis-cli 或者 redis-server 。Nginx 的命令行参数只有几个,相信不少同学也经常会用到,所以总体来说,今天学习的内容并不是特别的复杂。
关于 Redis 的运维,我的经验仅限于安装、备份,而且还是最简单的利用一些面板工具。之前很多篇文章中我都强调过,我没有 Redis 的主从及分布式的真实项目经历。经历过的流量最大的项目也只是一台 Redis 实例就抗住了。毕竟 Redis 具有号称单机单实例写入 8万/秒 ,读取 11万/秒 的能力,咱们一般的项目根本达不到啊。而且即使机器性能有差异,减一半,甚至减三分之一,3万/秒 的读取和写入的系统咱也没接触过。(最大接触到的是 3000条数据/秒 写入 List 队列)
其实啊,这个内容本来不打算写了,网上讲这一块的内容实在是太多了。不过呢,本着学习还是要全面的原则,而且还要让自己多多巩固复习的原则,咱还是来写一道吧。
继续我们的配置文件的学习,上回我们已经学习完了整个 Redis 配置文件的前半部分,今天我们就向后半部分进发。这一部分的内容说实话有更多的内容是更偏门的,都不知道是干嘛用的。还是那句话,本着了解的态度,死磕也要过一遍,以后万一哪天用到了,再详细深入的研究也不迟。
对于配置文件来说,往往是很多大佬们入手运维优化的第一步,因此我们想要真正的进阶,就一定要看看配置文件中有哪些可以配置的地方,有哪些可以优化的配置点。当然,咱也不是特别专业,有很多配置也不知道是啥意思,更不知道应该配成什么才是最好的。既然这样,那就一起来学学呗。
应用软件和数据库或者说和其它外部程序是怎么连接的呢?大部分同学应该都知道,基本都是通过 TCP 建立连接来进行通信的,不过也有像 ES 这种直接通过 HTTP 发请求来操作的。Redis 和大部分的数据库软件都是类似的,通过的是 TCP 连接的。另外还有 UnixSocket 这种形式,不过这种只能应用在本地。
锁这个概念,不知道大家掌握的怎么样。我是先通过 Java ,知道在编程语言中是如何使用锁的。一般 Java 的例子会是操作一个相同的文件,但其实我们知道,不管是文件,还是数据库中的一条数据,只要是多个进程或者线程共享的,需要共同操作的数据,都会因为异步读写而带来一些这问题,这些问题最终的解决方案往往就是通过锁。