ansibleguy.infra_nginx
Ansible 角色 - Nginx 网页服务器
Ansible 角色用于在 Linux 服务器上部署一个或多个 NGINX 网站。
已测试:
- 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