galaxyproject.nginx
nginx
nginxサーバーをインストールして管理するためのAnsibleロールです。
要件
このロールは、DebianシステムではAPTから、Enterprise LinuxシステムではEPELから、SmartOSではpkginからnginxをインストールします。他のシステムやインストール方法はサポートされていません。
ロール変数
すべての変数はオプションです。
一般設定
nginx_flavor(デフォルト:full): インストールするnginxパッケージ(選択肢は、あなたのDebianベースのディストリビューションのnginxメタパッケージプロバイダーを参照してください)。RedHatベースのディストリビューションでは、galaxy(「Galaxy nginx」、nginxのアップロードおよびpamモジュールを含む)か、EPEL nginxの他の値になります。この値はpkgin/SmartOSのインストール時には使用されません。一般的にはTUSを使用でき、fullは将来に向けた安全なデフォルトです。nginx_servers:server {}(バーチャルホスト)のテンプレートのリスト(templates/nginx/に対する相対パスで、ファイルの末尾に.j2が自動的に追加されます)。nginx_ssl_servers:nginx_serversと同様ですが、SSLが設定されている場合のみインストールされます。nginx_conf_http:nginx.confのhttp {}セクションに任意のオプションを設定します。これはハッシュ(辞書)で、キーがnginx設定オプション、値がオプションの値です。nginx_default_redirect_uri: EPELからnginxを使用する場合、デフォルトのバーチャルホストが有効になります。このオプションは、デフォルトのバーチャルホストがどのURIにリダイレクトされるべきかを制御します。nginx変数がサポートされています。nginx_enable_default_server(デフォルト:true): デフォルトのEPELバーチャルホストを有効または無効にします。nginx_supervisor: supervisorの下でnginxを実行します(特定のsupervisor変数を設定する必要があります)。nginx_conf_dir(デフォルト:/etc/nginx): nginxの設定ディレクトリ
SSL設定
nginx_conf_ssl_certificate*変数はSSLの使用を制御します。設定されていない場合、SSLは有効になりません。使用法については、例のプレイブックを参照してください。
nginx_conf_ssl_certificate: リモートホスト上のSSL証明書のファイル名。nginx_conf_ssl_certificate_key: リモートホスト上のSSLプライベートキーのファイル名。nginx_conf_ssl_ciphers:nginx.confのssl_ciphersオプション、これはリストです。nginx_conf_ssl_protocols:nginx.confのssl_protocolsオプション、これもリストです。
外部SSL設定
nginx_ssl_role(デフォルト: 未定義): SSLを設定するために実行するロール。これにより、例えばusegalaxy_eu.certbotの使用が可能になります。このロールは、nginxがポート80でセットアップされて実行された後ですが、nginxがSSLを使用しようとする前に実行する必要があります(certbotが実行されるまで、nginxが期待する証明書はまだ存在しないため)。これを設定すると、SSLロールが適切なタイミングで実行されます。nginx_ssl_serversも参照してください。nginx_conf_ssl_certificate: SSL証明書のファイル名。nginx_conf_ssl_certificate_key: SSLプライベートキーのファイル名。
このモードでは、nginx_conf_ssl_certificate*変数は絶対パスである必要があります。
プレイブックSSL設定
nginx_ssl_roleが未設定の場合、このロールを使用してプレイブックから証明書とキーをコピーできます。
nginx_ssl_conf_dir(デフォルト:<nginx_conf_dir>/ssl): SSL証明書やその他のSSL関連ファイルをコピーする場所。nginx_ssl_src_dir(デフォルト:files/ssl): SSL証明書のコピー元。sslkeys: プライベートキーを含むハッシュ(辞書)。キーは、nginx_conf_ssl_certificate_keyに一致するファイル名(先頭のパス要素なし)。nginx_conf_ssl_trusted_certificate: OCSPスタップリング用の信頼された証明書のファイル名(設定するとスタッピングが有効になります)。
このモードでは、nginx_conf_ssl_certificate*変数は相対パスである必要があります。ただし、レガシーの理由により、リモートホスト上のファイルへの絶対パスであることも可能です。この場合、証明書はnginx_ssl_src_dir内でパスのディレクトリ部分が削除された状態で検索されます。パスが絶対でない場合は、ソースに対してはnginx_ssl_src_dirに、宛先に対してはnginx_ssl_conf_dirに対する相対パスです。
SELinux
SELinuxが強制モードの場合、いくつかの追加アクションが実行されます:
certbot_well_known_rootが設定されている場合、すべてのサブディレクトリに対してhttpd_sys_content_tの権限を許可するように更新されます。nginx_selinux_allow_local_connections(デフォルト:false): nginxがローカルホストに接続できるようにします。
依存関係
必須ではありませんが、geerlingguy.repo-epelを使用してAnsibleでEPELを有効にすることができます。
例のプレイブック
証明書を取得する場所によっていくつかのプレイブックの例を示します。
ローカルSSL証明書
プレイブックに保存されているSSL証明書を使用してnginxをインストールします(証明書は{{ playbook_dir }}/files/ssl/snakeoil_cert.pemにあります):
- name: Install and configure nginx
hosts: webservers
vars:
sslkeys:
snakeoil_privatekey.pem: |
-----BEGIN PRIVATE KEY-----
MIIE...
-----END PRIVATE KEY-----
nginx_conf_ssl_certificate: snakeoil_cert.pem
nginx_conf_ssl_certificate_key: snakeoil_privatekey.pem
nginx_servers:
- vhost1
- vhost2
nginx_conf_http:
client_max_body_size: 1g
roles:
- galaxyproject.nginx
Let's Encrypt
Certbotを使用してLet's Encryptから取得したSSL証明書でnginxをインストールします(usegalaxy_eu.certbot利用):
- name: Install and configure nginx
hosts: webservers
vars:
nginx_conf_ssl_certificate: /etc/ssl/certs/fullchain.pem
nginx_conf_ssl_certificate_key: /etc/ssl/private/private.pem
nginx_servers:
- vhost1
- vhost2
nginx_ssl_servers:
- vhost1_ssl
- vhost2_ssl
nginx_conf_http:
client_max_body_size: 1g
nginx_ssl_role: usegalaxy_eu.certbot
certbot_auth_method: --webroot
certbot_domains:
- vhost1.example.org
- vhost2.example.org
certbot_admin_email: [email protected]
certbot_agree_tos: --agree-tos
certbot_well_known_root: /var/www/_well-known_root
certbot_post_renewal: |
systemctl restart nginx || true
roles:
- galaxyproject.nginx
templates/nginx/vhost1.j2とtemplates/nginx/vhost2.j2には、次のような内容を追加してください:
server {
location /.well-known/ {
root {{ certbot_well_known_root }};
}
}
自己署名証明書
生成された自己署名SSL証明書を使用してnginxをインストールします(ファイアウォールの背後でセキュアなサービスをテストするのに良いオプションです)。
- name: Install and configure nginx
hosts: webservers
vars:
nginx_servers:
- vhost1
- vhost2
nginx_ssl_servers:
- vhost1_ssl
- vhost2_ssl
nginx_conf_http:
client_max_body_size: 1g
nginx_ssl_role: galaxyproject.self_signed_certs
openssl_domains: # certbot_domainsと同様の動作
- vhost1.example.org
- vhost2.example.org
# これらは証明書とPKを保存したい場所に設定できます。
nginx_conf_ssl_certificate_key: /etc/ssl/private/{{ openssl_domains[0] }}.pem
nginx_conf_ssl_certificate: /etc/ssl/certs/{{ openssl_domains[0] }}.crt
roles:
- galaxyproject.nginx
ライセンス
Academic Free License ("AFL") v. 3.0
