repleo.nginx
Ansibleロール - Nginxサーバー
このロールはNginxウェブサーバーをインストールして設定します。ユーザーはサイトに適用したい任意のHTTP設定パラメータを指定できます。数多くのサイトを追加し、好みに応じた設定が可能です。
このロールは簡単にHTTPSウェブサーバーをインストールするためのLetsencrypt SSLをサポートしています。
要件
このロールはAnsible 1.4以上が必要で、プラットフォーム要件はメタデータファイルに記載されています。
ロール変数
このロールに渡すことができる変数とその簡単な説明は次のとおりです。
# nginx.confの強制生成。通常、nginx.confは存在しない場合のみ作成されます。
# このパラメータがtrueの場合、現在のnginx.confが上書きされます。
create_nginx_conf: true
# 許可される最大クライアント数
nginx_max_clients: 512
# HTTPパラメータのハッシュ。ここには
# 有効なnginxのHTTPパラメータを追加できます。
# (詳細についてはnginxのドキュメントを参照。)
nginx_http_params:
sendfile: "on"
tcp_nopush: "on"
tcp_nodelay: "on"
keepalive_timeout: "65"
access_log: "/var/log/nginx/access.log"
error_log: "/var/log/nginx/error.log"
# Nginxのサーバーを定義するハッシュのリスト。
# HTTPパラメータと同様に、有効なサーバーのパラメータをここに定義できます。
nginx_sites:
- file_name: foo
listen: 8080
server_name: localhost
root: "/tmp/site1"
ssl:
supplier: "local"
local_keystore_dir: "{{ playbook_dir }}/files/"
key: "ssl.key"
certificate: "ssl_chain.pem"
locations:
- name: /
lines:
- "try_files: $uri $uri/ /index.html"
- name: /images/
lines:
- "try_files: $uri $uri/ /index.html"
lines:
- "return 301 https://$http_host$request_uri;"
- file_name: bar
listen: 9090
server_name: ansible
root: "/tmp/site2"
locations:
- name: /
lines:
- "try_files: $uri $uri/ /index.html"
- name: /images/
lines:
- "try_files: $uri $uri/ /index.html"
例
HTTPディレクティブを指定してNginxをインストールしますが、サイトは設定しない:
- hosts: all
roles:
- {role: nginx, create_nginx_conf: true, nginx_http_params: { sendfile: "on", access_log: "/var/log/nginx/access.log"}, nginx_sites: [] }
- hosts: all
roles:
前の例とは異なるHTTPディレクティブでNginxをインストールしますが、ここでもサイトは設定しない。
- hosts: all
roles:
- {role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [] }
- hosts: all
roles:
注意:渡されたHTTPディレクティブが有効であることを確認してください。このロールはディレクティブの有効性をチェックしません。詳細についてはnginxのドキュメントを参照してください。
Nginxをインストールし、設定にサイトを追加します。
hosts: all
roles:
- { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
注意:各サイトはハッシュのリストで表され、生成された設定は/etc/nginx/sites-available/
に配置され、/etc/nginx/sites-enabled/
から対応するシンボリックリンクが作成されます。
特定のサイト設定のファイル名は"file_name"というキーのハッシュで指定され、有効なサーバーディレクティブが追加できます。
Nginxをインストールし、2つのサイトを追加します(異なる方法)。
hosts: all
roles:
- { role: nginx, create_nginx_conf: true, nginx_http_params: { tcp_nodelay: "on", error_log: "/var/log/nginx/error.log"}, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] }
既存のNginxインストールに仮想ホストを追加(必要に応じてNginxをインストール)。
hosts: all
roles:
- { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] } - file_name: bar, server_name: ansible, listen: 9090, root: "/tmp/site2", locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
注意:create_nginx_conf: true
のパラメータがない場合、このロールはnginx.confを上書きしません。このオプションを使用することで、異なるサービスのインストールスクリプトに基づいて、既存のnginxインストールに仮想ホストを追加できます。
HTTPSサーバーの例(キーのインストールを含む)
hosts: all
roles:
- { role: nginx, nginx_sites: [ - file_name: bar, server_name: localhost, listen: 8080, ssl: { supplier: "local" local_keystore_dir: "{{ playbook_dir }}/files/", key: localhost.key, certificate: localhost_chain.pem }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
注意:sslキーと証明書は、呼び出しプロジェクトのfiles
ディレクトリに存在する必要があります。
LetsEncryptキーのインストールを含むHTTPSサーバーの例
hosts: all
roles:
- { role: nginx, nginx_separate_logs_per_site: true, nginx_sites: [ - file_name: bar.ssl, server_name: "example.com www.example.com", listen: 443, ssl: { supplier: "letsencrypt", domains: [ "example.com", "www.example.com" ], generate_redirect: true }, locations: [ - name: /, lines: [ - "try_files: $uri $uri/ /index.html" ] - name: /images/, lines: [ - "try_files: $uri $uri/ /index.html" ] ] ] }
ハンドラー
NGINXロールは2つのハンドラーを提供します:
- Nginxをリロード
- Nginxを再起動
Nginx設定のリロードは、ダウンタイムなしでウェブサーバーを更新する機能を提供します。ただし、古いプロセスが更新されない可能性があります。再起動はウェブサーバーを停止して再起動し、(短い)ダウンタイムを引き起こします。
例:
- name: 設定ファイルのテンプレート
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart nginx
依存関係
なし
ライセンス
BSD
著者情報
Repleo, アムステルフェーン, ホランダ -- www.repleo.nl
Jeroen Arnoldus (jeroen@repleo.nl)
元のバージョン:
Benno Joy
Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments
ansible-galaxy install repleo.nginx