nginx的学习

news2024/11/14 6:29:36

1. 我们今天的目标是学习

  1. 了解认识nginx的基本结构和语法
  2. 学习经典案例

2. Nginx是什么

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,Nginx是由俄罗斯的人开发的,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、MacOS X、AIX以及MicrosoftWindows。

3. Nginx发型四大版本

  1. Nginx
    由俄罗斯人开发,主要支持,网站服务器,代理服务器,负载均衡服务器
    空壳,只有基础功能
  2. Nginx plus 商业版
    由F5公司开发,在Nginx版本的基础上做了加强,F5是专门做硬件的厂商,专门做负载均衡器
    花钱,要啥有啥
  3. Openresty
    OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
    OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
    功能异常强大,不是特殊要求,可以不用
  4. Tengine
    Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
    Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
    在国内是主流,首选。

4.Nginx的目录结构

4.1安装好的目录

├── bq-novel-web  一个小说网的根目录
├── client_body_temp 运行时生产的目录
├── conf 配置文件夹
│   ├── fastcgi.conf
│   ├── fastcgi_params
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── nginx.conf 主配置文件
│   ├── scgi_params
│   ├── uwsgi_params
│   └── win-utf
├── fastcgi_temp 运行时生产的目录
├── html 默认前端根项目
│   ├── 50x.html
│   └── index.html
├── logs 日志存放地
│   ├── access.log 运行日志
│   ├── error.log 错误日志
│   └── nginx.pid 进程pid存放地
├── proxy_temp 运行时生产的目录
├── sbin 命令文件夹
│   └── nginx 启动命令 
├── scgi_temp 运行时生产的目录
└── uwsgi_temp 运行时生产的目录

4.2 配置文件 /conf/nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    #开启一个 8888的端口
    server {
        listen       8888;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /bq-novel-web {
            alias   bq-novel-web/;
            index  index.html index.htm;
        }

        # 500 502 503 504 异常请求默认 xxxx:8888/50x.html 地址
        error_page  500 502 503 504  /50x.html;
        #/50.html地址
        location = /50x.html {
            root   html;
        }
    }
}

4.3 Nginx代理前端页面

1.root和alias使用位置:

  • root指令可以位于http、server、location中;
  • alias指令只能位于location中;

2.当两者都位于location中时, 对于符合location规则的URI处理方式不同:

  • 使用root指令,实际指向服务器文件的路径中,包含location路径,root+location+加上访问路径除去location相同部分的路径。
  • 使用alias指令,实际指向服务器文件路径中,不包含location路径,alias + 加上访问路径中除去location后的路径。

注意:
使用root时path后面有没有斜杠\都可以;使用alias时path一定要有斜杠\

5.如何启动关闭nginx

##检查配置文件是否正确
/usr/local/nginx-1.6/sbin/nginx -t 
./sbin/nginx -V     # 可以看到编译选项
## 启动、关闭
./sbin/nginx        # 默认配置文件 conf/nginx.conf,-c 指定 Windows版本的使用 start ./nginx
./sbin/nginx -s stop  #或 pkill nginx

## 重启,不会改变启动时指定的配置文件
./sbin/nginx -s reload

6. 请求转发

6.1 location的两种语法

约定熟成: []表示里面的参数能省略, <>表示里面的参数不能省略.

第一种语法分为3个部分, 分别是: location关键字+@name别名(name是自己取的名字)+如何处理, 这个语法很简单, 就是做内部跳转, 这里不讨论了.

location @name { ... }

第二种语法分为4个部分, 分别是: location关键字 + 匹配方式符号(可省略)+匹配规则+如何处理, 这个最复杂也是最常用, 我们只讨论这个.

location [ = | ~ | ~* | ^~ ] uri { ... }

这个语法的难点全部集中在[ = | ~ | ~* | ^~ ]这里, 只要搞懂这个就能正确使用location.
[ = | ~ | ~* | ^~ ]分为两种匹配模式, 分别是普通匹配和正则匹配.

6.1.1 普通匹配概述

= : 这代表精准匹配全路径, 命中它后直接返回, 不再进行后续匹配, 优先级最高.
^~ : 这代表精准匹配开头, 命中开头后直接返回, 不再进行后续匹配, 优先级第二.
无匹配方式符号 : 这代表通用性匹配, 命中后还会继续后续匹配, 最后选取路径最长的匹配, 并储存起来, 优先级第四.

举例

访问根地址:http://49.233.7.152:8881

1.访问首页 http://49.233.7.152:8881
2.精准匹配首页 http://49.233.7.152:8881/index.html
3.helloword首页 http://49.233.7.152:8881/helloword/index.html
3.demo首页中的图片 http://49.233.7.152:8881/demo/index.html

	#这是无匹配方式符号的普通匹配,如果请求都没有匹配上
	location / {
		root   html;
		index  index.html index.htm;
	}
	
	#这是精准匹配, 只有请求路径完全匹配`/index.html`才会命中它
	location = /index.html {
		root   html;
		index  index.html index.htm;
	}
	
	#这是精准匹配开头, 只要请求路径的开头是`/helloword/index.html`, 就会命中并立即返回
	location ^~ /helloword/index.html {
		alias   helloword_intercept/index.html;
	}
	
	#这是精准匹配开头, 只要请求路径的开头是`/helloword`, 就会命中并立即返回
	location ^~ /helloword {
		alias   helloword;
	}
	
	#这是无匹配方式符号的普通匹配, 如果请求路径开头是`/demo`, 则会命中, 但是不会立即返回还会接着进行普通匹配
	location /demo {
		alias   demo;
	}
	#这是无匹配方式符号的普通匹配, 如果请求路径开头是`/demo/image`, 则会命中, 但是不会立即返回还会接着进行普通匹配
	location /demo/image {
		alias   demo_intercept/image;
	}

6.1.2 正则匹配概述

~: 这是区分大小写的正则匹配, 命中后则不进行后续匹配, 立即返回, 优先级第三.
*~: 不区分大小写的正则匹配, 命中后则不进行后续匹配, 立即返回, 优先级第三.

这里有个很重要点点, 也就是正则匹配中 ~ 和 *~ 优先级一样, 它们按照从上到下的顺序进行匹配, 最先命中的立即返回, 后续的不会进行匹配, 所以精细的正则匹配规则往前放, 通用的正则匹配规则往后放.
举例

#区分大小写的正则匹配, 如果路径包含 /image/ 则立即返回, 注意这里并不需要开头命中, 因为这是正则表达式
location ~ /image/ {
  ...
}

#区分大小写的正则匹配, 如果路径包含 /image(不分大小写)/ 则立即返回, 注意这里并不需要开头命中, 因为这是正则表达式, 但由于上面一个正则匹配规则在前面, 所以如果路径包含 /image/ 则会被挡下来, 匹配不到这里.
location *~ /IMAGE/ {
  ... 
}

6.1.3 location如何匹配?

  1. 先进行普通匹配中的精准匹配, 如果命中了立马返回.
  2. 然后进行普通匹配中的精准开头匹配, 如果命中则立马返回.
  3. 进行普通匹配中的 无匹配符号 匹配, 如果命中继续匹配, 知道普通匹配全部完成, 并保存路径最长的匹配.
  4. 由上自下进行正则匹配, 如果命中立即返回.
  5. 如果正则匹配全部失败, 则返回普通匹配中存放的匹配.

执行示例图

6.2压缩文件

6.3负载均衡

6.4压缩调优

6.5限制

6.6流量过滤

6.7视频转码

6.8视频限流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/400093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫(二)解析数据

文章目录1. Xpath2. jsonpath3. BeautifulSoup4. 正则表达式4.1 特殊符号4.2 特殊字符4.3 限定符4.3 常用函数4.4 匹配策略4.5 常用正则爬虫将数据爬取到后&#xff0c;并不是全部的数据都能用&#xff0c;我们只需要截取里面的一些数据来用&#xff0c;这也就是解析爬取到的信…

通过测试驱动开发(TDD)的方式开发Web项目

最近在看一本书《Test-Driven Development with Python》&#xff0c;里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目。刚好这本书中使用了我之前所了解的一些技术&#xff0c;Django、selenium、unittest等。所以&#xff0c;读下来受益匪浅。 我相…

NFT的前景,元宇宙的发展

互联网的普及和数字技术的广泛应用&#xff0c;成为消费升级的新动力&#xff0c;在不断创造出更好的数字化生活的同时&#xff0c;也改变了人们的消费习惯、消费内容、消费模式&#xff0c;甚至是消费理念&#xff0c;数字经济时代的文化消费呈现出新的特征。 2020年有关机构工…

性能优化的核心思路

性能优化的本质是良好的用户体验和有限的资源之间的矛盾。核心思路【1】堆硬件 优化软件&#xff08;算法、步骤&#xff09;【2】开源&#xff08;堆机器&#xff09; 节流&#xff08;提高资源利用率&#xff0c;少占资源&#xff09;【3】输入、计算、输出【4】权衡核心思想…

谷粒学院开发(二):教师管理模块

前后端分离开发 前端 html, css, js, jq 主要作用&#xff1a;数据显示 ajax后端 controller service mapper 主要作用&#xff1a;返回数据或操作数据 接口 讲师管理模块&#xff08;后端&#xff09; 准备工作 创建数据库&#xff0c;创建讲师数据库表 CREATE TABLE edu…

git 当有人邀请你加入项目(gitee)

第一步&#xff0c;找到仓库地址 https://gitee.com/xxxxxxxxxxxxxxxx/abcd.git https://gitee.com/xxxxxxxxxxxxxxxx/abcd.git 2&#xff0c;打开git bush git clone https://gitee.com/xxxxxxxxxxxxxxxx/abcd.git 这条命令新建一个名为abcd&#xff08;也就是项目目录结尾…

python操作频谱仪(是德科技N9030B)

由于工作需要&#xff0c;需要针对产品进行一些自动化的测试&#xff0c;其中就包含了验证开机启动或者长时间运行时候对射频、晶振频率等等一些列进行获取频率或者功率的偏差。这里就需要用到了频谱仪&#xff0c;可以使用脚本连接到频谱仪进行循环对数据的采集等等。直接开始…

Python中的property介绍

Python中的property介绍 Python中进行OOP&#xff08;面向对象程序设计&#xff09;时&#xff0c;获取、设置和删除对象属性&#xff08; attribute&#xff09;的时候&#xff0c;常常需要限制对象属性的设置和获取&#xff0c;比如设置为只读、设置取值范围限制等&#xff…

28个案例问题分析---06---没有复用思想的接口和sql--mybatis,spring

复用思维故事背景没有复用的接口没有复用思想的接口优化方案问题一优化获取所有的课程获取某个人创建的课程问题二优化升华故事背景 项目里有两处没有复用的思想的体现。在这里进行总结并且进行优化。以这种思维方式和习惯来指导我们进行开发工作。 没有复用的接口 通过查看代…

PowerShell远程代码执行漏洞(CVE-2022-41076)分析与复现

漏洞概述PowerShell&#xff08;包括Windows PowerShell和PowerShell Core&#xff09;是微软公司开发的任务自动化和配置管理程序&#xff0c;最初只是一个 Windows 组件&#xff0c;由命令行 shell 和相关的脚本语言组成。后于2016年8月18日开源并提供跨平台支持。PowerShell…

网络安全与信息安全的主要区别讲解-行云管家

生活中工作中&#xff0c;我们经常可以听到信息安全与网络安全这两个词语&#xff0c;但很多小伙伴对于两者区分不清楚&#xff0c;今天我们小编就给大家来简单讲解一下这两者的主要区别吧&#xff01; 网络安全与信息安全的主要区别讲解 1、定义不同 网络安全是指网络系统的…

总结:Linux内核相关

一、介绍看eBPF和Cilium相关内容时&#xff0c;碰到Cilium是运行在第 3/4 层&#xff0c;不明白怎么做到的&#xff0c;思考原理的时候就想到了内容&#xff0c;本文记录下内核相关知识。https://www.oschina.net/p/cilium?hmsraladdin1e1二、Linux内核主要由哪几个部分组成Li…

前端——6.文本格式化标签和<div>和<span>标签

这篇文章&#xff0c;我们来讲一下HTML中的文本格式化标签 目录 1.文本格式化标签 1.1介绍 1.2代码演示 1.3小拓展 2.div和span标签 2.1介绍 2.2代码演示 2.3解释 3.小结 1.文本格式化标签 在网页中&#xff0c;有时需要为文字设置粗体、斜体和下划线等效果&#xf…

vuedraggable的使用

Draggable为基于Sortable.js的vue组件&#xff0c;用以实现拖拽功能。 特性 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 和vue2的国度动画兼容 支持撤销操作 当需要完全控制时&#xff0c;可以抛出所有变化 可…

【国际化】vue2+uniapp实现国际化

文章目录前言一、什么是国际化&#xff1f;二、使用步骤1.创建locale文件夹2.创建国际化JSON文件3.引入国际化总结前言 国际化其实是拓展你的应用的受众人群的一种方式&#xff0c;有利于你的项目应用范围更广&#xff0c;uniapp和vue官方文档都有针对于国际化有专门的文档&am…

WIFI电子标签参数

一、4.2寸WIFI电子标签参数 型号 PW42R_V1 尺寸(mm) 104.95*95.93*15.2mm 显示技术 3色墨水屏显示技术 可视区域(mm) 84.6*63.4 分辨率(像素) 400*300 像素尺寸(mm) 0.212*0.212 单点颜色 黑/白/红 视角 180 工作温度 0 - 40℃ 重量 150g 电池 CR2477*6 …

Nginx同一端口部署多个前后端分离的vue项目

要用nginx容器部署多个前端项目可以采用监听端口&#xff0c;和基于location配置两种方法&#xff0c; 我的nginx是使用docker部署的&#xff0c;启动的时候没有开多余的端口&#xff0c;所以采用location配置 一个server下根据根路径不同分别代理访问不同项目。 下面操练起来&…

什么是响应式编程

简称RP&#xff08;Reactive Programming&#xff09; 定义一 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流&#xff0c;而相关的计算模型会自动将变化的值通过数据流进行传播。 变化传播&#xff1a;主动/自动将…

2023/03/09 - Vue学习笔记 - 【组件通信】 vuex的使用和讲解—$store

官网&#xff1a;https://vuex.vuejs.org/zh/ 1 Vuex存在的意义 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是…

Kafka入门(七)

下面聊聊Kafka的配置参数&#xff0c;包括生产者的配置参数、Broker的配置参数、消费者的配置参数。 1、生产者配置参数 acks 该参数控制了生产者的消息发送确认机制&#xff0c;用于指定分区中必须有多少个副本成功接收到消息后生产者才会认为这条消息写入是成功的&#xff0c…