ansibleguy.infra_nginx

Nginx

Ansible 角色 - Nginx 网页服务器

Ansible 角色用于在 Linux 服务器上部署一个或多个 NGINX 网站。

请我喝杯咖啡

Molecule 测试状态 YamlLint 测试状态 PyLint 测试状态 Ansible-Lint 测试状态 Ansible Galaxy

Molecule 日志: 简短, 完整

已测试:

  • Debian 11
  • Debian 12

安装

# 安装最新版本
ansible-galaxy role install git+https://github.com/ansibleguy/infra_nginx

# 从 Galaxy 安装
ansible-galaxy install ansibleguy.infra_nginx

# 或者安装到自定义的角色路径
ansible-galaxy install ansibleguy.infra_nginx --roles-path ./roles

# 安装依赖
ansible-galaxy install -r requirements.yml

# 如果您想使用基本认证:安装 Python 依赖
python3 -m pip install -r requirements.txt

用法

想要一个简单的 Ansible 图形用户界面?查看我的 Ansible WebUI

配置

根据需要定义 nginx 字典!

nginx:
  config:
    client_max_body_size: '500m'
    ssl_session_timeout: '15m'
  
  sites:
    some_proxy:
      mode: 'proxy'
      domain: 'some.guy.net'
      aliases:
        - 'service.guy.net'

      port_ssl: 8443
      port_plain: 8080
      proxy:  # 默认代理目标是 localhost
        port: 50000  # 目标端口
        
        cache:  # 上游内容缓存
          enable: true

      ssl:
        mode: 'existing'  # 现有证书将被复制到目标服务器

      security:
        # 基于用户代理的基本过滤恶意机器人
        block_script_bots: true
        block_bad_crawler_bots: true

    guys_statics:
      mode: 'server'
      domain: 'static.guy.net'
      serve:
        path: '/var/www/static'

      ssl:
        mode: 'snakeoil'
      
      config:  # 以键值对的形式添加设置
        LimitRequestFields: 10
      config_additions:  # 添加自定义配置的行
        - 'location = /favicon.ico {alias /var/not_www/site_guys_statics/favicon.ico;}'

    git_stuff:
      mode: 'redirect'
      redirect:
        target: 'https://github.com/ansibleguy'

      ssl:
        mode: 'letsencrypt'
      letsencrypt:
        email: '[email protected]'

      security:
        restrict_methods: false

    fileshare:
      mode: 'server'
      domain: 'files.guy.net'
      serve:
        path: '/var/www/files'

      basic_auth:
        enable: true
        provider: 'file'
        file:
          users:
            some_user: 'some_password'

执行

运行播放书:

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml

要仅处理特定网站:(节省时间)

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e only_site=SITE_NAME
# 注意:多个以逗号分隔的网站也可以工作。

还有一些有用的 标签 可用:

  • base => 仅配置基本内容;网站不会被修改。
  • sites
  • config => 仅更新网站配置(_不包括证书_)
  • certs
  • letsencrypt
  • auth
  • only_certs(可以用作跳过标签)

调试错误时,您可以在运行时设置 'debug' 变量:

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes

功能

  • 软件包安装

    • Ansible 依赖(_最小_)
    • Nginx
  • 配置

    • 支持多个网站/服务器

    • 三种 配置模式

      • proxy(_默认_)
      • serve
      • redirect
    • 使用 'config' 和 'config_additions' 参数支持特定配置

    • 通过 GeoIP 过滤 'locations' 的选项 => 即将推出(:

    • 默认配置

      • 禁用:<TLS1.2,不安全的密码,自动索引,服务器头
      • 安全头:HSTS,X-Frame,Referrer-Policy,Content-Type nosniff,X-Domain-Policy,XXS-Protection
      • 限制以防止 DDoS
      • 使用自签名证书
      • 启用 HTTP2,并回退到 HTTP1.1
      • 启用 IPv6 支持
    • SSL 模式(_更多信息见:CERT ROLE_)

      • selfsigned => 生成自签名的证书
      • ca => 生成最小的证书颁发机构和由其签名的证书
      • letsencrypt => 使用 LetsEncrypt 证书工具
      • existing => 复制证书文件或使用现有的证书
    • 默认选项

      • 限制方法为 POST/GET/HEAD
      • 在 localhost 上监听状态页面
      • 记录到 syslog
      • http2
    • 默认禁用选项

      • 代理模式缓存
      • 阻止已知的脚本机器人
      • 阻止已知的爬虫机器人

信息

  • 注意: 此角色当前仅支持基于 Debian 的系统。

  • 注意: 大多数角色功能可以选择启用或禁用。

    有关所有可用选项,请参见位于主/站点默认文件中的默认配置!

  • 信息: 许多变量可以在“全局”或“每个网站”范围内设置。

    网站配置始终优先于全局配置。

  • 注意: 此角色期望未加密的“服务器”仅重定向到其加密连接。

  • 注意: 如果您希望所有域名都被某个网站/服务器“捕获”,则需要添加下划线 '_' 作为别名或域名!
    如果未提供域名,这也将自动完成。

  • 警告: 不是您提供的每个设置/变量都会检查其有效性。错误的配置可能会导致角色无法正常工作!

  • 信息: 要禁用默认设置和头部 => 只需将其值设置为:''(_空字符串_)。

  • 信息: 如果您通过防火墙使用 GeoIP 过滤请求 => LetsEncrypt 只需打开端口 80 即可。

    除了 '.well-known/acme-challenge/' 以外的请求将仅重定向到 443。

  • 信息: 为使 LetsEncrypt 续订工作,您必须允许对以下内容进行外部连接:

    80/tcp、443/tcp+udp 到 acme-v02.api.letsencrypt.org、staging-v02.api.letsencrypt.org(_调试模式_)和 r3.o.lencr.org。

  • 信息: 此角色还支持配置基本认证。

    对于高级用例,您可能希望在 site.config_additions_root 中设置 auth_request,用于实现 OAuth 代理等。

  • 信息: 您可以设置 plain_only 标志以禁用 HTTPS。这在您处于另一个代理服务器后面时可能很有用。

关于项目

Role to configure a nginx webserver in one of three basic config modes: proxy, redirect, server

安装
ansible-galaxy install ansibleguy.infra_nginx
许可证
other
下载
6.1k
拥有者
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg