循序渐进nginx(一):介绍、安装、hello world、Location匹配

前言:

  • 我为什么写这个呢?我就是感觉其他的文章或者视频都没有从最开始的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(一):介绍、安装、hello world、Location匹配

使用场景:

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

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

官方文档说明

💡有时候文档才是最有用的教程,我的教程并不会讲的很详尽,那么当你遇到问题的时候,参考文档也是不错的选择。比如说我讲了某个指令可以用在A上下文,但没说能不能用在B上下文的时候,你可以参考一下官方文档对于这个指令的上下文说明。
💡nginx中文文档没翻译什么,但在入门阶段,你可能更想看到一点中文的东西。指令虽然 老旧,但部分还是有参考价值的
💡英文原始文档注意中文文档一般会比较旧,有些指令可能会没有,但入门初期还能用。
💡文档里面会分很多模块,每一块点进去可以看到类似如下的说明:

循序渐进nginx(一):介绍、安装、hello world、Location匹配
💡你点进去文档的话会看到很多模块,模块的话,你可以认为模块用于划分功能,比如HTTP Core模块提供了核心的Http功能,负载均衡依赖于模块HTTP Upstream,访问控制依赖于HttpAccess模块,Https依赖于HttpSSL模块。nginx默认会自动安装上不少模块,可以通过 nginx -V来查看自己的nginx安装了什么模块,内置模块不会显示出来。
💡当你从我这里学到了一个指令,但有疑问的时候,可以考虑搜索一下官方文档。看官方文档是你应该学会的能力。

安装

windows下:

1.从下载地址下载到 nginx/Windows-x.x.x,这个是面向win环境的。
2.下载到的是一个压缩包,解压出来,可以看到如下的目录结构,其中nginx.exe就是用来启动nginx的程序

循序渐进nginx(一):介绍、安装、hello world、Location匹配
3.你可以直接运行nginx.exe,然后访问 http://localhost/,如果能看到下面的页面,那么代表安装和启动成功了。
循序渐进nginx(一):介绍、安装、hello world、Location匹配

linux(CentOS7)下:

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

💡centos7下使用yum来安装
1.执行 sudo yum install yum-utils

  1. 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源:

循序渐进nginx(一):介绍、安装、hello world、Location匹配

4.使用yum安装nginx, yum install nginx
5.启动nginx, systemctl start nginx
6.访问 http://linux系统IP/,如果看到下面的图就是安装启动成功。
💡防火墙默认防护了80端口,可能你需要执行 systemctl stop firewalld来临时关闭防火墙,这样才可以访问。

循序渐进nginx(一):介绍、安装、hello world、Location匹配

docker下:

  1. docker pull nginx:1.18.0 【你也可以自行去dockerhub看看你想安装什么版本】
  2. docker images,查看是否拉取镜像成功:
    循序渐进nginx(一):介绍、安装、hello world、Location匹配
  3. docker run --name nginx-8080 -p 8080:80 -d nginx:1.18.0 【运行nginx,如果你使用docker运行nginx,那么我默认当你有docker基础了,这些命令就不介绍了。】
  4. docker ps查看nginx是否已经运行了:
    循序渐进nginx(一):介绍、安装、hello world、Location匹配
    5.访问 http://docker宿主机IP:8080/,如果运行成功的话,会看到下图:
    循序渐进nginx(一):介绍、安装、hello world、Location匹配

目录结构

🔵安装成功之后,我们简单介绍一下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安装的目录:

循序渐进nginx(一):介绍、安装、hello world、Location匹配

名字 类型 说明 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默认的日志存储目录。

Original: https://www.cnblogs.com/progor/p/13338483.html
Author: 随风行云
Title: 循序渐进nginx(一):介绍、安装、hello world、Location匹配

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544263/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 高端程序员上班摸鱼指南

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处。 哈喽大家好啊,我是Hydra。虽然说…

    Java 2023年6月5日
    0189
  • 简单易懂讲文件

    注意事项 如果运行代码的时候找不到文件,但是文件的的确确又存在,检查下 idea 的工作路径 路径 Path Path 对象是将一个路径封装成一个对象,然后通过这个对象来执行路径的…

    Java 2023年6月8日
    099
  • spring*.xml配置文件明文加密

    系统架构:spring+mvc(Oracle是用jdbc自己封装的接口) 1.数据库配置文件加密 原xml配置 ….. 加密实现过程 思路:继承DruidDataSource,…

    Java 2023年6月8日
    079
  • MyBatis创建第二个项目

    Mysql文件配置 配置pom.xml 创建数据库连接信息配置文件 db.properties 创建MyBatis核心配置文件 mybatis-config.xml 创建pojo实…

    Java 2023年6月5日
    060
  • Java 数组综合应用

    Java 数组综合应用 需求 已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序, 随机生成10个1-100整数保存到数组,并降序打印及求平均值、最大值和最大值下标、并查找…

    Java 2023年6月5日
    098
  • SpringBoot下的文件上传

    ; 代码很简单。已经放到码云了,码云地址:https://gitee.com/zhang-zhixi/springboot-upload.git posted @2022-04-2…

    Java 2023年6月6日
    067
  • 【源码】按照自己的思路研究Spring AOP源码 ②

    问题的提出 哪一步导致了顺序的改变 AbstractAdvisorAutoProxyCreator.sortAdvisors()方法 总结 问题的提出 按照自己的思路研究Sprin…

    Java 2023年6月8日
    0161
  • Spring:基于注解的MVC程序示例

    首先创建一个 controller类 import org.springframework.stereotype.Controller; import org.springfram…

    Java 2023年5月30日
    080
  • RocketMQ的push消费方式实现的太聪明了

    大家好,我是三友,我又来了~~ 最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里…

    Java 2023年6月16日
    0117
  • 1.Nginx常用配置

    1.Nginx配置负载均衡 upstream cluster1{ //1.配置机器集群,并配置权重 server 192.168.3.3:8090 weight=8; server…

    Java 2023年6月13日
    087
  • 从零开始实现放置游戏(十四)——实现战斗挂机(5)地图移动和聊天

    上一节添加了websocket组件,实现了前后端通信。后面我们只需要根据游戏的业务逻辑,逐步实现各种功能即可。 另外,在实现具体业务逻辑时,发现上一章设计的消息对象有些不合理,由于…

    Java 2023年6月5日
    097
  • Spring StateMachine状态机

    一、状态机 有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在电商场景(订单、物流、售后)、社交(…

    Java 2023年5月30日
    078
  • CSharp: Visitor Pattern

    csharp;gutter:true; /// /// Summary description for Employee.</p> <pre><cod…

    Java 2023年6月16日
    062
  • 如何解决VMware 虚拟机不能铺满屏幕

    出现这种情况是因为分辨率设置问题,调整分辨率总能达到你想要的效果; 首先设置vmware为全屏模式 查看物理机的分辨率,然后再将虚拟机的分辨率设置了跟物理机的一致。完美解决 win…

    Java 2023年5月30日
    0173
  • 双指针问题的算法

    双指针主要分两类: 快慢指针和左右指针 对于 链表问题, 我们一般可以使用 快慢指针解决所谓的快慢指针是指, 使用两个指针按照不同的速度前进, 有两个指针我们可以确定: 一些题目 …

    Java 2023年6月7日
    0146
  • 搭建分布式事务组件 seata 的Server 端和Client 端详解(小白都能看懂)

    一,server 端的存储模式为:Server 端 存 储 模 式 (store-mode) 支 持 三 种 :file: ( 默 认 ) 单 机 模 式 , 全 局 事 务 会 …

    Java 2023年6月14日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球