使用ansible的剧本制作salt-master与salt-minion的安装与启动服务过程

news2024/9/17 8:58:47

虚拟机版本:Rocky Linux release 8.6 (Green Obsidian)

准备几台虚拟机

ipv4地址主机名
192.168.137.13center
192.168.137.14sp-1
192.168.137.15sp-2
192.168.137.16sp-3

一、center主机的配置

1.vim /etc/hosts


127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.137.13 center
192.168.137.14 sp-1
192.168.137.15 sp-2
192.168.137.16 sp-3

2.下载ansible-core

yum -y install ansible-core

3.配置ansible,执行剧本

3-1. 新建ansible目录,进入该目录,整个剧本操作都在ansible目录中完成

mkdir ansible
cd ansible

3-2. vim ansible.cfg

[defaults]
inventory=inventory
host_key_checking=False

注意事项,如果不是root用户,是sudo免密提权的普通用户alice可以这么写:

[defaults]
inventory=/home/alice/ansible/inventory #清单文件
roles_path=/home/alice/ansible/roles #角色目录
collections_paths=/home/alice/ansible/collections 
#collection 目录,多个目录冒号:分隔(仅适用于 RHEL9)
remote_user=alice #远程用户
[privilege_escalation] #sudo 提权
become=True #是否提权
become_method=sudo #提权方式
become_user=root #提权用户
become_ask_pass=False #是否需要密码

3-3.vim inventory

[master]
center
[minions]
center
sp-[1:3]
[master:vars]
ansible_connection=local
[minions:vars]
ansible_ssh_pass=a

检查ansible是否配置成功:

[root@localhost ansible]# ansible all -m ping
[WARNING]: Platform linux on host center is using the discovered Python interpreter at /usr/bin/python3.8,
but future installation of another Python interpreter could change the meaning of that path. See
https://docs.ansible.com/ansible-core/2.12/reference_appendices/interpreter_discovery.html for more
information.
center | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.8"
    },
    "changed": false,
    "ping": "pong"
}
sp-2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
sp-3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
sp-1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

注意:这步失败的话,如果检查前面的代码也没问题,可以把第二步免密ssh登录做了再试试

3-4. vim install.yml

---
- hosts: all
  gather_facts: false
  tasks:
    - name: get salt.repo
      shell: |
        sudo rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
        sudo curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo
        sudo yum clean all
      become: true

    - name: get master name
      set_fact:
        master_name: "{{ groups['master'][0] }}"

    - name: get master ip
      shell:  "cat /etc/hosts | grep {{ master_name }} | awk '{print $1}'"
      register: shell_out

    - name: set master_ip
      set_fact:
        master_ip: "{{ shell_out.stdout }}"

    - name: debug master_name and master_ip
      debug:
        msg: "master_name = {{ master_name }}, master_ip = {{ master_ip }}"

- hosts: master
  gather_facts: false
  tasks:
    - name: install salt-master
      yum:
        name: salt-master
        state: present
      become: true

    - name: change master configuration
      shell: "sed -i 's/^#interface.*/interface: {{ master_ip }}/' /etc/salt/master"
      become: true

    - name: start salt-master
      service:
        name: salt-master
        enabled: yes
        state: started
      become: true

- hosts: minions
  gather_facts: false
  tasks:
    - name: copy hosts to minions(为了获取salt-key)
      copy:
        src: /etc/hosts
        dest: /etc/hosts

    - name: install salt-minion
      yum:
        name: salt-minion
        state: present
      become: true
    
    - name: change minion configuration
      shell: "sed -i 's/^#master:.*/master: {{ master_name }}/' /etc/salt/minion"
      become: true
    
    - name: start salt-minion
      service:
        name: salt-minion
        enabled: yes
        state: started
      become: true

3-5.执行剧本

ansible-playbook install.yml

4.center主机获取salt-key

4-1.批量接受所有未接受的 minion

[root@localhost ansible]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
sp-1
sp-2
sp-3
Proceed? [n/Y] y
Key for minion sp-1 accepted.
Key for minion sp-2 accepted.
Key for minion sp-3 accepted.

4-2.检查是否获取成功:

[root@localhost ansible]# salt-key -L
Accepted Keys:
center
sp-1
sp-2
sp-3
Denied Keys:
Unaccepted Keys:
Rejected Keys:

4-3.也可以一次性接收多个salt-key:

salt-key -a sp-1,sp-2,sp-3

4-4.测试是否成功连接:

test.ping
[root@localhost ansible]# salt '*' test.ping
sp-3:
    True
sp-1:
    True
sp-2:
    True
center:
    True

#使用正则表达式,加-E参数
[root@localhost ansible]# salt 'sp-.*' -E test.ping
sp-1:
    True
sp-3:
    True
sp-2:
    True

#-L参数,将字符串以空格或者,号分隔开,再每个匹配展示

[root@localhost ansible]# salt 'sp-1,sp-2,sp-3' -L test.ping
sp-1:
    True
sp-3:
    True
sp-2:
    True
#或
[root@localhost ansible]# salt 'sp-1 sp-2 sp-3' -L test.ping
sp-1:
    True
sp-3:
    True
sp-2:
    True

#-G 选项用于基于 minion 的 grains 数据来进行目标定位(targeting)。Grains 是 SaltStack 中的一种数据结构,它允许 minion 收集有关自身的信息,并将这些信息报告给 master。Grains 可以包括操作系统类型、内核版本、硬件信息等各种系统元数据。使用 -G 选项,您可以根据这些 grains 数据来选择特定的 minion 执行命令
[root@localhost ansible]# salt 'fqdn:sp-1' -G test.ping
sp-1:
    True


#-C(大写)选项,混合方式
[root@localhost ansible]#  salt 'G@host:center or E@sp-[1-2]' -C test.ping
sp-2:
    True
center:
    True
sp-1:
    True
查看test.version
[root@localhost ansible]# salt '*' test.version
sp-2:
    3005.5
sp-1:
    3005.5
center:
    3005.5
sp-3:
    3005.5
 查看grains(采集硬件信息)
#grains,采集硬件信息
[root@localhost ansible]# salt 'sp-1' grains.ls
[root@localhost ansible]# salt 'sp-1' grains.items
#只要具体的几项:
[root@localhost ansible]# salt 'sp-1' grains.item host fqdn selinux master
sp-1:
    ----------
    fqdn:
        sp-1
    host:
        sp-1
    master:
        center
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
4-5.拒绝未接受的minion

拒绝所有:

[root@localhost ansible]# salt-key -R

拒绝指定的一个或多个minion:

salt-key -r sp-1,sp-2,sp-3

4-6.删除已接受的minion

拒绝所有:

[root@localhost ansible]# salt-key -D

批量删除已接受的具体某些minion:

[root@localhost ansible]# salt-key -d center,sp-1,sp-2,sp-3

5.配置/etc/salt/master

5-1.配置nodegroups

​
使用/etc/salt/master配置nodegroups

[root@localhost ansible]# vim  /etc/salt/master
加上
nodegroups:
  sp_group: L@sp-1,sp-2,sp-3

[root@localhost ansible]# systemctl restart salt-master
[root@localhost ansible]# salt -N sp_group cmd.run "ls"
sp-3:
    anaconda-ks.cfg
sp-2:
    anaconda-ks.cfg
sp-1:
    anaconda-ks.cfg


​

cmd.exec_code,cmd.exec_code_all 可以指定解释器执行命令:

[root@localhost ansible]# salt sp-1 cmd.exec_code_all sh "echo hello"
sp-1:
    ----------
    pid:
        14927
    retcode:
        0
    stderr:
    stdout:
        hello
[root@localhost ansible]# salt sp-1 cmd.exec_code sh "echo hello"
sp-1:
    hello

二、免密ssh登录sp-1,sp-2,sp-3

在center主机执行:

ssh-keygen一路回车
ssh-copy-id sp-1
有yes/no选项的=》yes
输入密码,回车

ssh-copy-id sp-2
同上

ssh-copy-id sp-3
同上

然后依然在center主机使用
ssh sp-1
到该主机后命令行输入exit返回center主机
ssh sp-2
同上
ssh sp-3
同上

 三、salt模块

列出所有的模块


[root@localhost ansible]# salt sp-1 sys.list_modules
sp-1:
    - acl
    - aliases
    - alternatives
    - archive
    - artifactory
    - at
    - baredoc
    - beacons
    - bigip
    - btrfs
    - buildout
    - chroot
    - cloud
    - cmd
    - composer
    - config
    - consul
    - container_resource
    - cp
    - cron
    - cryptdev
    - data
    - defaults
    - devinfo
    - devmap
    - dig
    - disk
    - django
    - dnsmasq
    - dnsutil
    - drbd
    - environ
    - ethtool
    - event
    - extfs
    - file
    - freezer
    - gem
    - genesis
    - glassfish
    - glusterfs
    - gnome
    - google_chat
    - grafana4
    - grains
    - group
    - hashutil
    - helm
    - highstate_doc
    - hosts
    - http
    - hue
    - incron
    - ini
    - inspector
    - introspect
    - iosconfig
    - ip
    - iptables
    - jboss7
    - jboss7_cli
    - jinja
    - k8s
    - kernelpkg
    - key
    - keyboard
    - kmod
    - kubeadm
    - locale
    - locate
    - log
    - logrotate
    - lowpkg
    - lvm
    - mandrill
    - match
    - mattermost
    - mine
    - minion
    - modjk
    - mount
    - msteams
    - nagios_rpc
    - namecheap_domains
    - namecheap_domains_dns
    - namecheap_domains_ns
    - namecheap_ssl
    - namecheap_users
    - network
    - nexus
    - nfs3
    - nova
    - nspawn
    - nxos
    - nxos_api
    - nxos_upgrade
    - openscap
    - openstack_config
    - opsgenie
    - out
    - pagerduty
    - pagerduty_util
    - pam
    - parallels
    - partition
    - peeringdb
    - pillar
    - pip
    - pkg
    - pkg_resource
    - ps
    - publish
    - pushover
    - pyenv
    - qemu_img
    - qemu_nbd
    - quota
    - raid
    - random
    - random_org
    - rbenv
    - rest_sample_utils
    - restartcheck
    - ret
    - rsync
    - rvm
    - s3
    - s6
    - salt_proxy
    - salt_version
    - saltcheck
    - saltutil
    - schedule
    - scsi
    - sdb
    - seed
    - selinux
    - serverdensity_device
    - service
    - shadow
    - slack
    - slsutil
    - smbios
    - smtp
    - solrcloud
    - sqlite3
    - ssh
    - state
    - status
    - statuspage
    - supervisord
    - sys
    - sysctl
    - sysfs
    - syslog_ng
    - system
    - telegram
    - telemetry
    - temp
    - test
    - timezone
    - tuned
    - udev
    - uptime
    - user
    - vault
    - vbox_guest
    - virtualenv
    - vsphere
    - x509
    - xfs
    - xml
    - zabbix
    - zenoss

 1.cmd模块

查看cmd的方法有哪些?

[root@localhost ansible]# salt 'sp-1' sys.list_functions cmd
sp-1:
    - cmd.exec_code
    - cmd.exec_code_all
    - cmd.has_exec
    - cmd.powershell
    - cmd.powershell_all
    - cmd.retcode
    - cmd.run
    - cmd.run_all
    - cmd.run_bg
    - cmd.run_chroot
    - cmd.run_stderr
    - cmd.run_stdout
    - cmd.script
    - cmd.script_retcode
    - cmd.shell
    - cmd.shell_info
    - cmd.shells
    - cmd.tty
    - cmd.which
    - cmd.which_bin

 查看cmd.run的帮助文档

[root@localhost ansible]# salt sp-1 sys.doc cmd.run

cmd.run使用示例:

[root@localhost ansible]# salt 'sp-1' cmd.run "ls -l;hostname"
sp-1:
    total 4
    -rw-------. 1 root root 1039 May 16 16:06 anaconda-ks.cfg
    sp-1

#批量执行
[root@localhost ansible]#  salt '*' cmd.run "hostname"
sp-3:
    sp-3
sp-2:
    sp-2
sp-1:
    sp-1
center:
    center

2.cp模块(复制)

查看帮助文档:

[root@localhost ansible]# salt sp-1 sys.doc cp

修改/etc/salt/master配置:

file_roots:
  base:
    - /srv/salt

重启salt-master

systemctl restart salt-master 

cp.get_file(获取文件)

[root@localhost ansible]# mkdir -p /srv/salt/files/
[root@localhost ansible]# vim /srv/salt/files/test_get.txt
这是master文件

#使用示例:
[root@localhost ansible]# salt sp-2 cp.get_file salt://files/test_get.txt /root/test.txt
sp-2:
    /root/test.txt
[root@localhost ansible]# salt sp-2 cmd.run "ls /root"
sp-2:
    anaconda-ks.cfg
    test.txt
[root@localhost ansible]# salt sp-2 cmd.run 'cat /root/test.txt'
sp-2:
    这个是master节点的文件!!!

cp.get_dir

#注意:不能是空目录,至少要有一个文件的目录才能使用这个方法

[root@localhost ansible]# mkdir -p /srv/salt/test_dirs
[root@localhost ansible]# salt sp-2 cp.get_dir salt://test_dirs/ /root/                                    sp-2:
#没有复制过去,因为是空目录
#给该目录加一个文件就可以了
[root@localhost ansible]# echo hello > /srv/salt/test_dirs/1.txt
[root@localhost ansible]# salt sp-2 cp.get_dir salt://test_dirs/ /root/
sp-2:
    - /root//test_dirs/1.txt
[root@localhost ansible]# salt sp-2 cmd.run 'ls /root/'
sp-2:
    anaconda-ks.cfg
    test.txt
    test_dirs
[root@localhost ansible]# salt sp-2 cmd.run 'ls /root/test_dirs'
sp-2:
    1.txt

cp.push


[root@localhost ansible]# vim /etc/salt/master
file_recv: True

[root@localhost ansible]# systemctl restart salt-master

[root@localhost ansible]# salt sp-2 cp.push /root/test.txt
sp-2:
    True
[root@localhost ansible]# ls /var/cache/salt/master/minions/sp-2/files/root/
test.txt


[root@localhost ansible]# salt sp-2 cp.push /root/test.txt upload_path=/test/file/file.txt
sp-2:
    True
[root@localhost ansible]# find / -name 'file.txt'
...
/var/cache/salt/master/minions/sp-2/files/test/file/file.txt
[root@localhost ansible]# ls /var/cache/salt/master/minions/sp-2/files/test/file/
file.txt


state.sls => 类似ansible的剧本

查看某个模块的剧本示例帮助

#查看帮助文档
salt sp-1 sys.list_state_functions pkg
salt sp-1 sys.state_doc pkg.installed

salt sp-1 sys.list_state_functions service
salt sp-1 sys.state_doc service.dead

编辑nginx下载启动服务剧本

mkdir /srv/salt/state/
cd  /srv/salt/state/
mkdir nginx
cd nginx
vim nginx_install.sls
#剧本内容
nginx-install:
  pkg.installed:
    - name: nginx

nginx-service:
  service.running:
    - name: nginx
    - enable: True
    - require:
      - pkg: nginx-install

#执行nginx_install.sls剧本
salt sp-1 state.sls state.nginx.nginx_install
#检测是否成功
salt sp-1 cmd.run 'ps -ef | grep nginx'
salt sp-1 cmd.run 'service nginx status'

关闭nginx服务

vim nginx_stop.sls
#关闭nginx
stop_nginx_service:
  service.dead:
    - name: nginx

[root@localhost nginx]# salt sp-1 state.sls state.nginx.nginx_stop
sp-1:
----------
          ID: stop_nginx_service
    Function: service.dead
        Name: nginx
      Result: True
     Comment: Service nginx was killed
     Started: 08:20:02.938253
    Duration: 358.058 ms
     Changes:
              ----------
              nginx:
                  False

Summary for sp-1
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 358.058 ms
[root@localhost nginx]# salt sp-1 cmd.run 'service nginx status'

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

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

相关文章

【C/C++】C++程序设计基础(继承与派生、多态性)

目录 八、继承与派生8.1 派生类的引入与特性8.2 单继承8.3 同名成员的访问方式8.4 赋值兼容规则8.5 单继承的构造与析构8.6 多继承 九、多态性9.1 运算符重载9.2 虚函数9.3 纯虚函数与抽象类 八、继承与派生 8.1 派生类的引入与特性 -继承:一旦指定了某种事物父代的本质特征&a…

线程相关内容

线程 一、介绍二、thread库1、构造函数(1)函数(2)说明(3)注意 2、join函数3、detach4、joinable函数5、get_id函数 三、mutex的种类1、mutex(1)介绍(2)lock&a…

vant UI之van-tab如何实现标题两行显示

前言: 相必大家在开发移动端或者小程序时都会见到如下设计稿 这个时候大家基本上都会想到使用vant UI 的van-tab组件,如果实现不了那就自己封装一个tab组件这样的情况。 其实使用van-tab是可以实现的,不过要借助van-tab的一系列api和css&…

数据结构(2):LinkedList和链表[1]

下面我们来介绍一种新的数据结构,链表。 我们曾经讨论过顺序表。它的数据存储在物理和逻辑上都是有逻辑的。而我们今天要学习的链表,则在物理结构上非连续存储,逻辑上连续。 1.链表的认识 链表由一个一个的节点组成。 我们可以想象一列火…

乐鑫安全制造全流程

主要参考资料: 【乐鑫全球开发者大会】DevCon24 #10 |乐鑫安全制造全流程 乐鑫官方文档Flash加密: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/security/flash-encryption.html 【ESP32S3】使用 Flash 下载工具完成 Flash 加密功能…

C++ | Leetcode C++题解之第394题字符串解码

题目&#xff1a; 题解&#xff1a; class Solution { public:string src; size_t ptr;int getDigits() {int ret 0;while (ptr < src.size() && isdigit(src[ptr])) {ret ret * 10 src[ptr] - 0;}return ret;}string getString() {if (ptr src.size() || src[…

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; static const int MASK1 1 << 7; static const int MASK2 (1 << 7) (1 << 6);bool isValid(int num) {return (num & MASK2) MASK1; }int getBytes(int num) {if ((num & MASK1) 0) {return 1;}int n 0;in…

windows电脑自动倒计时关机

今天聊一聊其他的。我时不时的有一个需求&#xff0c;是关于在windows电脑上定时关机。 不知道怎么地&#xff0c;我好几次都忘了这个自动定时关机的终端命令&#xff0c;于是每一次都要去网上查。 1.鼠标右击【开始菜单】选择【运行】或在键盘上按【 WinR】快捷键打开运行窗口…

【变化检测】基于STANet建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、STANet模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113 likyoo变化检测源码&#xff1a;https://github.com/likyoo/open-cd 使用情况&#xff1a…

力扣周赛:第414场周赛

&#x1f468;‍&#x1f393;作者简介&#xff1a;爱好技术和算法的研究生 &#x1f30c;上期文章&#xff1a;[首期文章] &#x1f4da;订阅专栏&#xff1a;力扣周赛 希望文章对你们有所帮助 本科打ACM所以用的都是C&#xff0c;未来走的是Java&#xff0c;所以现在敲算法还…

探索未来住宿新体验:酒店智能开关引领的智慧生活

酒店智能开关作为智慧酒店的重要组成部分&#xff0c;正悄然改变着我们的旅行住宿方式&#xff0c;让每一次入住都成为一场科技与舒适的完美邂逅。 智能开关&#xff1a;重新定义酒店房间的每一个角落 传统酒店中&#xff0c;房间的灯光、空调、窗帘等设备的控制往往依赖于手动…

LCD字符图片显示——FPGA学习笔记11

一、字模显示原理 字模数据&#xff1a;将这个0/1矩阵按照屏幕扫描的顺序以字节的形式体现。 取模软件设计&#xff1a; 点阵数要按照实际情况填写 二、实验任务 本节的实验任务是通过开发板上的RGB TFT-LCD接口&#xff0c;在RGB LCD液晶屏的左上角位置从上到下依次显示图片以…

【数据结构】希尔排序(缩小增量排序)

目录 一、基本思想 1.1 引入希尔排序的原因 1.2 基本思想 二、思路分析 三、gap分组问题 四、代码实现 4.1 代码一&#xff08;升序&#xff09; 4.2 代码二&#xff08;升序&#xff09; 五、易错提醒 六、时间复杂度分析 七、排序小tips 一、基本思想 1.1 引入希尔…

Vue3:<Teleport>传送门组件的使用和注意事项

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 Vue3 引入了一个新的内置组件 <Teleport>&#xff0c;它允许你将子组件树渲染到 DOM 中的另一个位置&#xff0c;而不是在父组件的模板中直接渲染。这对于需要跳出当前组件的 DOM 层级结构进行渲染的…

15.1 JDBC数据库编程1

目录 15 引言 15.1.1 数据库语言SQL 15.2 JDBC体系结构 15.2.1 JDBC访问数据库 15.2.2 JDBC API介绍 15 引言 数据库系统&#xff08;database system,DBS&#xff09;由一个互相关联的数据集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库。 …

音频-语言大模型原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

YOLOv8改进实战 | 注意力篇 | CloFormer: 注意力机制与卷积的完美融合CloAtention,即插即用

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…

(C++) 6大作用域

文章目录 &#x1f365;前言&#x1f365;C 6大作用域&#x1f41f;块&#x1f41f;名字空间&#x1f41f;类&#x1f41f;函数参数&#x1f41f;枚举&#x1f41f;模板参数 ⭐END&#x1f31f;交流方式 &#x1f365;前言 在 C core guidelines 中有一个准则&#xff1a; ES.…

深入探索Unity协程:揭开CSharp迭代器背后的神秘面纱

协程是一种特殊类型的迭代器方法&#xff0c;允许你在多个帧之间分段执行代码。可以用来处理时间延迟、异步操作和顺序执行的任务&#xff0c;而不阻塞主线程。Unity协程的实现依赖于C#语言提供的迭代器相关的语言特性&#xff0c;所以想要弄清楚Unity协程的底层原理&#xff0…

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配&#xff08;Exact Match&#xff09;2. 正则表达式匹配&#xff08;Regex Match&#xff09;3. 前缀匹配&#xff08;Prefix Match&#xff09; 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中&#xff0…