geerlingguy.apache

Ansible 角色:Apache 2.x

CI

一个 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 目录的 AllowOverrideOptions 指令的默认值。虚拟主机可以通过指定 allow_overrideoptions 来覆盖这些值。

apache_mods_enabled:
  - rewrite
  - ssl
apache_mods_disabled: []

要启用或禁用的 Apache 模块(这些将被链接到适当的位置)。有关所有可用模块,请查看 Apache 配置目录(Debian/Ubuntu 上为 /etc/apache2/mods-available)中的 mods-available 目录。

apache_packages:
  - [平台特定]

要安装的软件包列表。对于 RedHat 或基于 Debian 的系统,默认为一组平台特定的软件包(有关默认值,请查看 vars/RedHat.ymlvars/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-epelgeerlingguy.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 的作者。

关于项目

Apache 2.x for Linux.

安装
ansible-galaxy install geerlingguy.apache
许可证
mit
下载
10.3M
拥有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns