前言:

  • 我为什么写这个呢?我就是感觉其他的文章或者视频都没有从最开始的location开始讲。
  • 有的直接从负载均衡讲起,而将location的url匹配规则之类的放到后面再讲。我就觉得缺少了前置知识。
  • 所以我就写下了这篇文章,尽量以一个零nginx基础的角度来讲述nginx。尽量循序渐进的讲述。如果你看的时候感觉还是不够循序渐进或许感觉有什么疏漏,希望能留下你的意见。

循序渐进Nginx将分成三节来讲

1.介绍、安装、hello world、Location匹配(已完成)

2.反向代理、负载均衡、缓存服务、静态资源访问(已完成)

3.日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语。(已完成)


Nginx是什么

  • nginx读作(engine x),engine是引擎的意思,这寓意着他强大的动力。
  • nignx是一个高性能的http服务器代理服务器负载均衡服务器
  • nginx是开源的,由C语言编写,创始人为俄国人伊戈尔·赛索耶夫。
  • 如果要说最受欢迎的web服务器,莫过于nginx了吧,小厂大厂都在用 ,阿里自己都对nginx进行了自定义开发(Tengine)。除了一些非常小访问量的业务(能用tomcat就可以解决的那种)之外,应该大部分都使用上了nginx。
  • nginx基于事件驱动模型,nginx的并发能力都要高于其他的服务器(Apache:要素察觉)。
  • nginx基于开源和模块化设计,可以通过第三方模块来丰富自己的功能。

netcraft的数据统计显示nginx是目前最受欢迎的web服务器:

使用场景:

如果你不懂理解下面的场景,那你就把你学习的意图定为“学习最受欢迎的服务器”也行,一般来说你都会有机会去使用nginx。当然也有可能分工过于明确导致你没机会去碰部署相关的东西。

  • 代理服务:nginx支持反向代理,可以把发送给自己的请求代理给业务服务端来处理,类似于API网关的作用,可以把一个外网的请求代理给本地内网的服务端来处理,这样就某种程度上保护了内网的服务器。
  • 负载均衡:nginx可以实现负载均衡,比如tomcat的单个服务端并发能力不大,当我们水平扩充成多个tomcat的时候,使用nginx的负载均衡功能把请求分发给多个tomcat,可以达到多个tomcat服务端达到负载均衡的效果。
  • 缓存:nginx有客户端缓存的处理以及代理缓存的处理。客户端缓存:在传递一些静态资源的时候,如果浏览器能缓存下来,就避免了短时间内重复向nginx请求这个静态资源。(代理缓存:)在代理请求的时候,可能有些响应数据是短期内不会变更或者长期不会变更的,为了提高响应速度,我们可能会需要对这些数据进行缓存,比如你需要菜单栏数据,在很长期可能菜单栏数据都不会变,而如果你每次都代理请求到业务服务端来响应的话,查数据库就需要消耗不少资源,而使用nginx缓存之后,nginx就会直接返回,不需要查业务服务端了。
  • 其他。。。。。

    如果你学过一些微服务方面的知识的话,你会发现这三个场景其实也能在微服务方面见到,这就是nginx设计思想的优越性。

官方文档说明

有时候文档才是最有用的教程,我的教程并不会讲的很详尽,那么当你遇到问题的时候,参考文档也是不错的选择。比如说我讲了某个指令可以用在A上下文,但没说能不能用在B上下文的时候,你可以参考一下官方文档对于这个指令的上下文说明。

nginx中文文档没翻译什么,但在入门阶段,你可能更想看到一点中文的东西。指令虽然老旧,但部分还是有参考价值的

英文原始文档注意中文文档一般会比较旧,有些指令可能会没有,但入门初期还能用。

文档里面会分很多模块,每一块点进去可以看到类似如下的说明:



你点进去文档的话会看到很多模块,模块的话,你可以认为模块用于划分功能,比如HTTP Core模块提供了核心的Http功能,负载均衡依赖于模块HTTP Upstream,访问控制依赖于HttpAccess模块,Https依赖于HttpSSL模块。nginx默认会自动安装上不少模块,可以通过nginx -V来查看自己的nginx安装了什么模块,内置模块不会显示出来。

当你从我这里学到了一个指令,但有疑问的时候,可以考虑搜索一下官方文档。看官方文档是你应该学会的能力。


安装

windows下:

1.从下载地址下载到nginx/Windows-x.x.x,这个是面向win环境的。

2.下载到的是一个压缩包,解压出来,可以看到如下的目录结构,其中nginx.exe就是用来启动nginx的程序



3.你可以直接运行nginx.exe,然后访问http://localhost/,如果能看到下面的页面,那么代表安装和启动成功了。

linux(CentOS7)下:

.在linux下既可以通过源代码包来安装(这里不讲,有兴趣自行百度),也可以通过其他方式来安装,例如redhat/centos就支持yum安装,下面主要讲使用yum来安装nginx(yum方式安装的话,自定义可能没那么强,但胜在方便,适合初学者,你可以后面再学使用其他方式安装。yum模式安装默认会按照额外的一些第三方模块,但并没有提供很多的第三方模块安装方法,安装第三方模块的时候还行建议使用编译安装的方式。但由于我们这里没有怎么使用第三方模块,所以暂时以yum方式为例)。RHEL-CentOS nginx官方安装文档,我们这里只讲centos7下的安装,没有讲ubuntu下的安装,需要的可以自行看一下官方文档或者百度一下。

centos7下使用yum来安装

1.执行sudo yum install yum-utils



2.vim /etc/yum.repos.d/nginx.repo,填入以下内容,设置nginx的yum源:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

3.执行一下yum repolist,更新一下yum源:

4.使用yum安装nginx,yum install nginx

5.启动nginx,systemctl start nginx

6.访问http://linux系统IP/,如果看到下面的图就是安装启动成功。

防火墙默认防护了80端口,可能你需要执行systemctl stop firewalld来临时关闭防火墙,这样才可以访问。

docker下:

1.docker pull nginx:1.18.0 【你也可以自行去dockerhub看看你想安装什么版本】

2.docker images,查看是否拉取镜像成功:



3.docker run --name nginx-8080 -p 8080:80 -d nginx:1.18.0 【运行nginx,如果你使用docker运行nginx,那么我默认当你有docker基础了,这些命令就不介绍了。】

4.docker ps查看nginx是否已经运行了:



5.访问http://docker宿主机IP:8080/,如果运行成功的话,会看到下图:


目录结构

安装成功之后,我们简单介绍一下nginx的目录结构。

查看一下nginx安装相关目录:

[root@localhost ~]# whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz

/etc/nginx/就是nginx安装的目录:

名字 类型 说明
conf.d 目录 nginx主配置文件存储位置
mime.types 文件 设置Content-Type与扩展名的关系,例如可以设置响应为html文件时,响应的Content-Type为text/html
fastcgi_params
scgi_params
uwsgi_params
文件 与fastcgi,scgi,uwsgi相关的配置文件
modules 目录 nginx模块目录,nginx的模块存储在这里,比如安装第三方模块的时候就存储在这里
nginx.conf 文件 nginx主配置文件
koi-utf
koi-win
win-utf
文件 编码转换映射文件,用于在输出内容到客户端时,将一种编码转换到另一种编码。
因为作者是俄国人,所以有koi这个编码转换。

/usr/sbin/nginx是nginx启动程序

/usr/lib64/nginx里面放了模块相关文件。

/usr/share/nginx放了一些nginx的默认资源,比如index.html

/usr/share/man/man8/nginx.8.gz存放了man语法帮助文件。

除了这些上面的文件/目录,其实还有一些其他的文件/目录,我们在后面教程中用到再讲,比如/var/log/nginx就是nginx默认的日志存储目录。


------------------- 分割线:下面介绍简单使用,由于nginx非常少用于window,所以下面的例子基于linux -----------


Hello World

下面我会简单介绍一下默认的配置文件,并做一个非常简单的修改,这将作为后面的介绍nginx的基础知识。

1.展示一下默认的核心配置:

下面的配置文件我都有打注释,如果你能看懂注释(应该都能稍微看懂吧),那就记一下,如果看不懂,那就记一下变量的名字吧,这样我后面介绍的时候你还记得这个变量写在哪里。

/etc/nginx/nginx.conf:

/etc/nginx/conf.d/default.conf:

nginx.conf中使用了include /etc/nginx/conf.d/*.conf;来将conf.d下的文件导入到http块中。

上面导入的server的效果等同于直接在http块中写server块:

2.介绍一下效果:

  • 我们首先启动nginx,执行命令systemctl start nginx
  • 然后访问机器的80端口,这个80端口由default.conf配置文件的listen指定。假设我的机器是192.168.48.128,那么此时访问一下http://192.168.48.128,你会看到一个welcome页面。
  • 其实http://192.168.48.128这个请求刚好匹配到了location /,而返回的资源页面其实刚好就是root+index得到的路径的内容,也就是/usr/share/nginx/html下的index.html
  • 我们把index.html里面的的Welcome to nginx!修改成Welcome to my nginx,然后刷新一下,会看到页面的效果变了。
  • 所以返回的确实是/usr/share/nginx/html下的index.html

这个例子大概的给location匹配和资源返回开了个头。

3.修改一下配置:

我们尝试修改一下location来使得能够访问我们自己创建的文件。也相当于验证上面的例子的一些内容。

我们在/usr/share/nginx/helloworld下创建一个hello.html

<html>
<body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<h1>我的第一个标题</h1> <p>我的第一个段落。</p> </body>
</html>

然后在conf.d/default.conf增加一个location(直接与第一个location同级),location用于定义url匹配,做后端开发的可能更熟悉一个词——路由分发,比如下面的location = /hello.html就用于定义访问nginx主机IP/hello.html

    location = /hello.html {
#root用于定义资源根目录,比如访问/hello.html得到的是/usr/share/nginx/html/helloworld/hello.html
root /usr/share/nginx/html/helloworld;
}

4.展示修改后的效果:

访问一下nginx主机IP/hello.html就可以看到我们的内容,root用于定义根路径,所以最终返回的文件的路径是/usr/share/nginx/html/helloworld/hello.html

响应的是我们定义的内容就说明我们这个location配置成功了。

循序渐进nginx(一):介绍、安装、hello world、Location匹配的更多相关文章

  1. 前端开发掌握nginx常用功能之server&location匹配规则

    nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...

  2. Nginx的介绍和安装详解

    [介绍+安装]Nginx的介绍和安装详解   == 介绍和安装 == Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反转代理服务器, 其性能与IMAP/POP3代理服务器相当.Nginx ...

  3. 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语

    目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...

  4. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

  5. Nginx之location 匹配规则详解

    有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...

  6. Nginx源码安装及调优配置

    导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...

  7. Nginx的介绍和使用

    http://blog.csdn.net/shimiso/article/details/8690897 1.什么是Nginx Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向 ...

  8. Nginx服务编译安装、日志功能、状态模块及访问认证模式实操

    系统环境 [root@web ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@web ~]# uname -a Linux d ...

  9. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

随机推荐

  1. js基础练习题(6)

    10.其他 1.选择题 var name = 'World!'; (function () { if (typeof name === 'undefined') { var name = 'Nodei ...

  2. Kubernetes 两步验证 - 使用 Serverless 实现动态准入控制

    作者:CODING - 王炜 1. 背景 如果对 Kubernetes 集群安全特别关注,那么我们可能想要实现这些需求: 如何实现 Kubernetes 集群的两步验证,除了集群凭据,还需要提供一次性 ...

  3. 洛谷 P1025 【数的划分】

    进入正题 思路:递归 这道题有点像放苹果: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 转化一下就有: 把n个苹果放在k个 ...

  4. Linux下Jmeter+nmon+nmon analyser实现性能监控及结果分析

    一.概述 前段时间讲述了Jmeter利用插件PerfMon Metrics Collector来监控压测过程中服务器资源的消耗,一个偶然机会,我发现nmon这个 工具挺不错,和Jmeter插件比起来, ...

  5. rhel7 rpmbuild 制作二进制程序安装包(.rpm) 简单示例

    下载rpm-build: # yum install rpm-build 如果上述方式无法安装(没配置网络源,虚拟机下是安装媒介源) 可以用下列方式下载后再安装(实践结果可能版本问题引起的缺少太多的* ...

  6. python之os模块分类整理

    OS模块简单介绍: 它是一个Python的系统编程的操作模块,可以处理文件和目录.比如查找文件或目录,对大量的路径与文件处理. 常用操作方法: os.name :指出当前你使用的操作平台,‘nt’代表 ...

  7. 《The Google File System》论文研读

    GFS 论文总结 说明:本文为论文 <The Google File System> 的个人总结,难免有理解不到位之处,欢迎交流与指正 . 论文地址:GFS Paper 阅读此论文的过程中 ...

  8. 升降梯上——玄学dp

    升降梯上 题目描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄. \(Nescafe ...

  9. Fetch.AI 首席技术官Toby Simpson参与AMA活动

    感谢7月11日在YouTube上参与 Fetch.AI AMA的所有人.我们收到了大量的问题,遗憾的是我们没有时间回答其中的多数问题.如果你错过了现场AMA,你可以在下面观看全部内容: 在本文中,我们 ...

  10. Quartz.Net 任务调度

    基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度 在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentSch ...