geerlingguy.apache
Ansible 角色:Apache 2.x
一个 Ansible 角色,用于在 RHEL/CentOS、Debian/Ubuntu、SLES 和 Solaris 上安装 Apache 2.x。
需求
如果您使用 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
中添加正确的软件包,例如 Ubuntu 的 libapache2-mod-php5
),或者使用 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 的配置文件夹中,跳过此角色添加的简单(但更基础的)文件。如果您需要进一步自定义 VirtualHosts 的布局,也可以覆盖使用的模板并设置自己的模板路径。
apache_remove_default_vhost: false
在 Debian/Ubuntu 上,Apache 的配置中包含一个默认的虚拟主机。将此设置为 true
以删除该默认虚拟主机配置文件。
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
添加重写规则以重定向所有请求到 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_no_log: true
在运行 playbook 时是否在控制台中打印与 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
- ssl
apache_mods_disabled: []
要启用或禁用的 Apache 模块(这些将被链接到适当的位置)。有关所有可用模块,请查看 Apache 配置目录(Debian/Ubuntu 上为 /etc/apache2/mods-available
)中的 mods-available
目录。
apache_packages:
- [平台特定]
要安装的软件包列表。对于 RedHat 或基于 Debian 的系统,默认为一组平台特定的软件包(有关默认值,请查看 vars/RedHat.yml
和 vars/Debian.yml
)。
apache_state: started
运行此角色时强制执行的 Apache 守护进程的初始状态。这通常应保持为 started
,但如果您需要在运行 playbook 期间修复 Apache 配置或在运行此角色时不希望 Apache 启动,可以将其设置为 stopped
。
apache_enabled: yes
设置 Apache 服务的启动时间状态。通常应保持为 yes
,但如果您希望在关闭服务的情况下运行 Ansible,可以将其设置为 no
。
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
。在这样做时,您可能需要多次运行 playbook,以便配置所有虚拟主机(如果 playbook 的其他部分生成 SSL 证书)。
基于 .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>
您需要在自己的 playbook 中生成/上传自己的 .htpasswd
文件。可能还有其他角色以更集成的方式支持此功能。
依赖
无。
示例 Playbook
- hosts: webservers
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.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 的作者。
ansible-galaxy install geerlingguy.apache