wcm_io_devops.apache
wcm_io_devops.apache
一个可以在 RHEL/CentOS、Debian/Ubuntu、SLES 和 Solaris 上安装 Apache 2.x 的 Ansible 角色。
wcm.io 分支
wcm.io 开始维护自己的分支,以更快地将更改集成到原始 geerlingguy.apache 仓库中。
wcm.io 分支在原有功能的基础上添加了以下特性:
请求 #150
apache_listen_port
和apache_listen_port_ssl
在 Debian、RedHat/Amazon Linux 和 SUSE 上的支持apache_mods_enabled
在 Debian、RedHat/Amazon Linux 和 SUSE 上的支持。
问题 https://github.com/geerlingguy/ansible-role-apache/issues/81
问题 https://github.com/geerlingguy/ansible-role-apache/issues/21
命名空间
此角色发布在 wcm-io-devops
命名空间内。
版本管理
该分支的版本号将与 原仓库 的版本保持一致。
为了保持原始版本,wcm.io 的发布将增加第四个
版本号,以 -
分隔,随着每次 wcm.io 的发布而递增,例如 3.0.0-1
和 3.0.0-2
。
需求
如果您使用 SSL/TLS,您需要提供您自己的证书和密钥文件。您可以使用如下命令生成自签名证书:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example.key -out example.crt
。
如果您在 Apache 中使用 PHP,建议使用 geerlingguy.php
角色来安装 PHP,您可以选择使用 mod_php(通过将适当的软件包添加到 php_packages
中,例如 libapache2-mod-php5
针对 Ubuntu),或者使用 geerlingguy.apache-php-fpm
通过 FPM 将 Apache 连接到 PHP。有关更多信息,请查看该角色的 README。
角色变量
可用的变量列表及其默认值如下(见 defaults/main.yml
):
apache_enablerepo: ""
用于安装 Apache 的仓库(仅在 RHEL/CentOS 系统上使用)。如果您希望使用比操作系统核心仓库中可用的更新版本的 Apache,请使用 EPEL 等仓库(可以通过 geerlingguy.repo-epel
角色安装)。
apache_listen_ip: "*"
apache_listen_port: 80
apache_listen_port_ssl: 443
Apache 应该侦听的 IP 地址和端口。如果您有其他服务(比如反向代理)侦听在 80 或 443 端口,并需要更改默认值,这个设置会很有用。
apache_create_vhosts: true
apache_vhosts_filename: "vhosts.conf"
apache_vhosts_template: "vhosts.conf.j2"
如果设置为 true,将创建一个 vhosts 文件,由此角色的变量管理(见下文),并放置在 Apache 配置文件夹中。如果设置为 false,您可以将自己的 vhosts 文件放入 Apache 的配置文件夹中,跳过由此角色添加的方便(但较基本)文件。如果需要进一步自定义虚拟主机的布局,您还可以覆盖所使用的模板,并设置指向您自己模板的路径。
如果将 apache_create_vhosts
设置为 false,vhosts.conf
将在配置过程中被删除。
apache_remove_default_vhost: false
在 Debian/Ubuntu 和 RedHat/CentOS 上,默认虚拟主机包含在 Apache 的配置中。将其设置为 true
将删除该默认虚拟主机配置文件。
apache_remove_default_vhost_ssl: false
在基于 RedHat/CentOS 的系统中,ssl.conf 中存在默认的虚拟主机。将其设置为 true
将从 ssl.conf 配置文件中删除该虚拟主机。
apache_global_vhost_settings: |
DirectoryIndex index.php index.html
# 在后续行添加其他全局设置。
您可以使用此变量在角色提供的 vhosts 文件中添加或覆盖全局 Apache 配置设置(假设 apache_create_vhosts
为 true)。默认情况下,仅设置 DirectoryIndex 配置。
apache_vhosts:
# 附加可选属性:'serveradmin, serveralias, extra_parameters'。
- servername: "local.dev"
documentroot: "/var/www/html"
为每个虚拟主机添加一组属性,包括 servername
(必需)、documentroot
(必需)、allow_override
(可选:默认为 apache_allow_override
的值)、options
(可选:默认为 apache_options
的值)、serveradmin
(可选)、serveralias
(可选)和 extra_parameters
(可选:您可以在这里添加任何额外的配置行)。
以下是使用 extra_parameters
添加 RewriteRule 以重定向所有请求到 www.
站点的示例:
- servername: "www.local.dev"
serveralias: "local.dev"
documentroot: "/var/www/html"
extra_parameters: |
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
表示 YAML 中的多行标量块,因此换行符在生成的配置文件输出中被保留。
apache_vhosts_ssl: []
默认情况下没有配置 SSL 虚拟主机,但您可以使用与 apache_vhosts
相同的模式添加它们,并添加一些额外指令,例如以下示例:
apache_vhosts_ssl:
- servername: "local.dev"
documentroot: "/var/www/html"
certificate_file: "/home/vagrant/example.crt"
certificate_key_file: "/home/vagrant/example.key"
certificate_chain_file: "/path/to/certificate_chain.crt"
extra_parameters: |
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
其他 SSL 指令可以通过其他与 SSL 相关的角色变量进行管理。
apache_ssl_protocol: "All -SSLv2 -SSLv3"
apache_ssl_cipher_suite: "AES256+EECDH:AES256+EDH"
在客户端进行安全连接时使用/允许的 SSL 协议和密码套件。这些是安全/合理的默认值,但为了最大安全性、性能和/或兼容性,您可能需要调整这些设置。
apache_allow_override: "All"
apache_options: "-Indexes +FollowSymLinks"
每个虚拟主机的 documentroot
目录的 AllowOverride
和 Options
指令的默认值。虚拟主机可以通过指定 allow_override
或 options
来覆盖这些值。
apache_mods_enabled:
- rewrite.load
- ssl.load
apache_mods_disabled: []
(仅限 Debian/Ubuntu)要启用或禁用的 Apache 模块(这些将被符号链接到适当的位置)。请参阅 Apache 配置目录中的 mods-available
目录(默认路径为 /etc/apache2/mods-available
)以获取所有可用模块。
apache_packages:
- [平台特定的]
要安装的软件包列表。默认情况下,这设置为 RedHat 或 Debian 基于系统的特定软件包(请参见 vars/RedHat.yml
和 vars/Debian.yml
中的默认值)。
apache_state: started
在运行此角色时强制设置 Apache 守护进程的初始状态。通常应保持为 started
,但如果您需要在运行剧本时修复 Apache 配置,或者在运行此角色时不希望 Apache 启动,可以将其设置为 stopped
。
apache_packages_state: present
如果您启用了任何额外的仓库,例如 _ondrej/apache2_、geerlingguy.repo-epel 或 geerlingguy.repo-remi,您可能希望有一个简单的方法来升级版本。您可以将其设置为 latest
(与 RHEL 上的 apache_enablerepo
配合使用),并可以直接从其他仓库升级到不同的 Apache 版本(而不是卸载并重新安装 Apache)。
apache_ignore_missing_ssl_certificate: true
如果您希望仅在虚拟主机证书存在时创建 SSL 虚拟主机(例如使用 Let’s Encrypt 时),请将 apache_ignore_missing_ssl_certificate
设置为 false
。在这样做时,您可能需要多次运行剧本,以便配置所有虚拟主机(如果剧本的另一个部分生成 SSL 证书)。
#apache_rhel_custom_vhosts_path: /etc/httpd/vhosts.d
在 RHEL/CentOS 上,有时您可能希望使用自定义目录来存放虚拟主机文件,而不是 /etc/httpd/conf.d
,那您可以使用此变量。
基于 .htaccess 的基本授权
如果您需要基本认证支持,您可以通过自定义模板或通过向虚拟主机配置添加 extra_parameters
来添加,例如:
extra_parameters: |
<Directory "/var/www/password-protected-directory">
Require valid-user
AuthType Basic
AuthName "请认证"
AuthUserFile /var/www/password-protected-directory/.htpasswd
</Directory>
要保护虚拟主机指令内的所有内容,请使用 Location
块,而不是 Directory
:
<Location "/">
Require valid-user
....
</Location>
您需要在自己的剧本中生成/上传自己的 .htpasswd
文件。可能还有其他角色以更集成的方式支持此功能。
依赖
无。
示例剧本
- hosts: webservers
vars_files:
- vars/main.yml
roles:
- { role: wcm_io_devops.apache }
在 vars/main.yml
中:
apache_listen_port: 8080
apache_vhosts:
- {servername: "example.com", documentroot: "/var/www/vhosts/example_com"}
许可证
MIT / BSD
作者信息
此角色由 Jeff Geerling 创建于 2014 年,他也是 Ansible for DevOps 的作者。
此分支由 wcm.io 维护。