Nginx 教程

Nginx 教程 Nginx 简介 Nginx 源码架构分析 Nginx 编译安装 Nginx(Tengine) 编译安装 Nginx(OpenResty) 编译安装 Nginx 配置简述 Nginx Docker 容器化配置

Nginx 核心配置指令

Nginx 核心配置指令 Nginx 配置文件 Nginx 进程配置指令 Nginx 端口监听:listen Nginx 主机名server_name Nginx 处理HTTP请求 Nginx 路由匹配规则:localhost Nginx 重定向配置:rewrite Nginx 根目录配置:root Nginx 访问路径别名:alias Nginx 文件判断:try_files Nginx 零复制:sendfile Nginx 日志记录配置

Nginx HTTP模块

Nginx 镜像模块 Nginx 请求头控制模块 Nginx IP访问控制模块 Nginx 用户cookie模块 Nginx 并发连接数限制模块 Nginx 首页处理模块 Nginx 请求频率限制模块 Nginx 页面缓存时间配置 Nginx gzip压缩及相关配置

Nginx Web服务

Nginx 静态资源服务器搭建 Nginx 文件下载服务器搭建 Nginx 伪动态SSI服务器 Nginx HTTPS服务器搭建 Nginx FastCGI模块配置简述 Nginx PHP服务器环境搭建 Nginx 基于FastCGI负载均衡 Nginx CGI网关接口 Nginx uWSGI模块配置 Nginx Python项目部署 Nginx 伪流媒体服务器搭建 Nginx HTTP2模块配置简述 Nginx WebDAV模块配置简述

Nginx 代理服务器

Nginx HTTP代理服务器 Nginx stream模块简述 Nginx TCP/UDP代理简述 Nginx 基于SSL的TCP代理服务器 Nginx gRPC代理服务器

Nginx 缓存

Nginx Web缓存配置 Nginx 代理缓存配置 Nginx Memcached 缓存模块 Nginx 反向代理缓存服务器配置 Nginx 客户端缓存控制

Nginx 负载均衡

Nginx 负载均衡模块 Nginx 负载均衡策略 Nginx 长连接负载均衡 Nginx upstream容错机制 Nginx upstream动态更新 Nginx TCP/UDP负载均衡

Nginx 日志管理监控

Nginx 日志分析简述 Nginx 访问日志配置 Nginx 错误日志配置 Nginx 日志归档配置 Nginx 日志分析工具 ELK Nginx 监控工具 Prometheus

Nginx 集群

LVS(Linux虚拟服务器)简介 Keepalived 配置简述 Nginx 集群负载搭建 Nginx 集群配置管理规划 Nginx 配置归档工具GitLab Nginx 配置修改工具Ansible Jenkins 安装与配置简述 Nginx 集群配置管理实例

Nginx 在 k8s 的应用

Kubernetes(k8s)系统简述 Kubernetes(k8s)集群部署 Kubernetes(k8s)网络通信 Nginx Ingress 简介 Nginx Ingress 安装部署 Nginx Ingress 配置映射 Nginx Ingress 注解


Nginx 配置修改工具Ansible

Ansible 是一款自动化的运维工具,是基于 Python 开发的。Ansible 提供了一种自动化执行框架,其可以按照用户设计的剧本自动化执行相关操作。Ansible 是基于模块工作的,其可以实现使用各种模块,并按照设计的剧本,批量对多个目标执行相同的操作。Ansible 集合了众多运维工具的优点,配置更加简单方便。

1、Ansible剧本(playbook)

Ansible 剧本是 Ansible 可以自动化执行一系列动作的执行方式。其通过 YAML 格式文件描述任务步骤,Ansible 按照指定的步骤有序执行,并支持同步和异步,非常适合完成各种复杂的部署工作。Ansible 剧本的相关术语如下。
  • 任务(Tasks),由 YAML 描述的一系列操作步骤。
  • 变量(Variables),被剧本引用,可以使剧本的设计更加灵活,并根据变量的值执行不同的步骤。
  • 模板(Templates),可根据变量的值,动态生成目标文件的预置文件,Ansible 使用 Jinja2 模板语法。
  • 处理器(Handlers),当剧本任务条件满足时,触发执行的任务步骤。
  • 角色(Roles),描述某一特定任务的集合,其由以上术语的 YAML 描述文件组成。
  • 主机(Hosts),被剧本操作的目标主机 IP 或组名称,主机组名称由外部的 hosts 文件定义。

Ansible 中每个剧本只有一个主入口文件,并且只有一个主线任务,主线任务可根据不同条件选用不同的角色,每个角色由任务、变量、模板、处理器的 YAML 描述文件组成。

Ansible 及剧本目录结构如下:
.
├── ansible.cfg                 # ansible配置文件
├── hosts                       # 目标主机资源文件
└── roles                       # 剧本目录,可自定义
    ├── nginx                         # 剧本角色名称及角色任务文件目录
    │   ├── defaults                 # 角色默认变量目录
    │   │   └── main.yaml           # 默认变量自动加载的文件
    │   ├── files                    # 文件存放目录
    │   ├── handlers                 # 处理器任务文件目录
    │   │   └── main.yaml           # 默认处理器任务自动加载的文件
    │   ├── tasks                    # 角色任务文件存放目录
    │   │   └── main.yaml           # 当前角色默认的任务入口文件
    │   └── templates                # 任务模板存放目录
    └── nginx.yaml                    # 剧本入口文件

2、基础语法

1) 步骤描述

任务由多个步骤组成,每个步骤由步骤命名、任务模块、动作组成,配置样例如下:
- name: reload Nginx Service                        # 步骤名
  systemd: "name=nginx state=reloaded enabled=yes"  # 任务模块为systemd,动作是对系统服务
                                                    # Nginx执行reload操作

2) 执行顺序

Ansible 剧本中的步骤是自上而下执行的,在默认情况下,每个步骤的执行结果返回值如果不为 0,就会报错,剧本任务也终止,也可以通过忽略错误指令继续运行,配置样例如下:
- name: Create conf.d
  shell: mkdir -p /etc/nginx/conf.d # 任务模块是shell,动作是执行mkdir命令
  ignore_errors: True               # 如果当前动作执行出错,忽略错误继续执行

3) 变量赋值

Ansible 剧本中变量赋值有静态和动态两种方式,一种是在 defaults 目录的 main.yaml 文件中静态地直接赋值,这通常被用作默认变量的赋值,配置样例如下:
confdir: "/etc/nginx"                           # 定义变量confdir的值为/etc/nginx
另一种是在当前执行的过程中动态地进行变量赋值,被赋值的变量可以在当前剧本执行过程中被引用,配置样例如下所示:
# 方法一:将执行结果动态赋值给变量
  - name: Test Nginx Config
    shell: nginx -c {{ confdir }}/nginx.conf -t     # 任务模块是shell,动作是Nginx
                                                    # 执行-t参数命令
    register: test_result                           # 将执行结果赋值给变量test_result
# 方法二:根据其他变量的值进行动态的变量赋值
  - name: check set_fact output
    set_fact: output="{{ work }}/output"            # 为变量output赋值
    when: test_result                               # 当变量test_result为真时

4) 条件判断

在 Ansible 剧本中可以根据变量的值判断是否执行当前步骤,配置样例如下:
- debug: msg="{{ test_result.stderr_lines }}"   # 任务模块debug,输出变量test_result.
                                                # stderr_lines的内容
  when: not test_result.stderr_lines == ""      # 当test_result变量的输出结果不为空,
                                                # 执行当前步骤

5) 外部引入

多个步骤可以编写在一个 YAML 文件中,并通过指令 include_tasks 被其他任务引入,结合条件判断,它可以使主线任务因变量不同而存在多个不同分支,配置样例如下:
- name: "check system type"
  include_tasks: linux.yaml                         # 引入外部任务步骤
  when: ansible_os_family != "Windows"              # 当目标操作系统非windows时,执行当前
                                                    # 任务

3、剧本执行

Ansible 剧本编写结束后,使用 ansible-playbook 命令调用剧本入口文件执行相应的剧本,即可自动完成预设的任务。

ansible-playbook -i /etc/ansible/hosts /etc/ansible/roles/nginx.yaml --extra-vars 'hosts=192.168.2.145'