Shir0kamii.ansible_role_nginx

Ansibleロール: Nginx

ビルドステータス

注意: NGINX, Inc.の公式NGINX Ansibleロールの使用を検討してください。

このロールは、RedHat/CentOS、Debian/Ubuntu、Archlinux、FreeBSD、およびOpenBSDサーバーにNginxをインストールします。

このロールは、Nginx yumリポジトリ(RedHatベースのシステム)、apt(Debianベースのシステム)、pacman(Archlinux)、pkgng(FreeBSDシステム)、またはpkg_add(OpenBSDシステム)から最新のNginxをインストールし、設定します。Nginxをインストールした後、特定のウェブサイトのための場所やオプションを説明する独自の[virtualhost].confファイルを/etc/nginx/conf.d/内に追加するなど、追加の設定作業が必要になることがあります。

要件

特になし。

ロール変数

使用可能な変数は以下にリストされており、デフォルト値と共に説明されています(defaults/main.ymlを参照してください):

nginx_vhosts: []

Nginxのバーチャルホストのためのvhost定義(サーバーブロック)のリストです。各エントリーは、server_nameによって名前付けされた別の設定ファイルを作成します。空のままにすると、独自のバーチャルホスト設定を提供する必要があります。利用可能なサーバーオプションのコメント付きの例は、defaults/main.ymlで確認できます。サーバー定義に多くのカスタマイズが必要な場合は、この変数を[]のままにして、vhost設定ファイルを自分で管理する方が良いでしょう。

nginx_vhosts:
  - listen: "443 ssl http2"
    server_name: "example.com"
    server_name_redirect: "www.example.com"
    root: "/var/www/example.com"
    index: "index.php index.html index.htm"
    error_page: ""
    access_log: ""
    error_log: ""
    state: "present"
    template: "{{ nginx_vhost_template }}"
    filename: "example.com.conf"
    extra_parameters: |
      location ~ \.php$ {
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass unix:/var/run/php5-fpm.sock;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
      ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
      ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
      ssl_protocols       TLSv1.1 TLSv1.2;
      ssl_ciphers         HIGH:!aNULL:!MD5;

上記の例は、extra_parametersに対する構文ブロックを宣言するために|を使用した、完全に設定されたnginx_vhostsエントリーの例です。

上記のブロックのインデントに注意してください。最初の行は通常の2スペースのインデントでなければなりません。他のすべての行はその行に対して通常のインデントを入れる必要があります。生成されたファイルでは、全体のブロックが4スペースのインデントになります。このスタイルは、設定ファイルが正しくインデントされることを保証します。

  - listen: "80"
    server_name: "example.com www.example.com"
    return: "301 https://example.com$request_uri"
    filename: "example.com.80.conf"

上記の例は、リダイレクトされる二次vhostの例です。

注意: filenameは、デフォルトでserver_nameの最初のドメインに設定されます。同じドメインの2つのvhostがある場合(例:リダイレクト)、2つ目が最初のものを上書きしないように手動でfilenameを設定する必要があります。

nginx_remove_default_vhost: false

Nginxによって供給される「デフォルト」バーチャルホスト設定を削除するかどうかを決定します。これは、基本の/ URLを、自分のバーチャルホストに向けたい場合に便利です。

nginx_upstreams: []

Nginxをロードバランサーとして設定する際、この変数を使用して1つ以上のアップストリームセットを定義できます。少なくとも1つのアップストリームを定義する必要があり、その後、サーバーブロックのいずれかを、定義したアップストリームを通じてリクエストをプロキシするように設定する必要があります(例:proxy_pass http://myapp1;)。詳細については、defaults/main.ymlのコメントに記載された例を見てください。

nginx_user: "nginx"

Nginxが実行されるユーザー。RedHatではnginx、Debianではwww-data、FreeBSDおよびOpenBSDではwwwがデフォルトです。

nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
nginx_worker_connections: "1024"
nginx_multi_accept: "off"

nginx_worker_processesは、マシン上のコアの数に設定する必要があります(デフォルトが間違っている場合は、grep processor /proc/cpuinfo | wc -lでこの数を見つけてください)。nginx_worker_connectionsはプロセスごとの接続数です。同時接続数を増やすために、これを高く設定してください(接続は、すべてのクライアントに対してkeepaliveタイムアウトの期間中使用されます)。Nginxがすべての接続を直ちに受け入れることを望む場合は、nginx_multi_acceptonに設定できます。

nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"

デフォルトのエラーログおよびアクセスログの設定。ログを完全に無効にするには、offに設定します。

nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"

TCP接続オプションについては、このブログ投稿を参照してください。

nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"

Nginxのkeepalive設定。タイムアウトは、Pollingスタイルのトラフィック(特にAJAX駆動のサイト)が多い場合、高く(10秒以上)設定する必要があります。ほとんどのユーザーがいくつかのページを訪れ、その後のリクエストを送信しないサイトの場合は低く(10秒未満)設定してください。

nginx_server_tokens: "on"

Nginxのserver_tokens設定。NginxがHTTPヘッダーにそのバージョンを応答するかどうかを制御します。無効にするには"off"に設定してください。

nginx_client_max_body_size: "64m"

この値は、可能な最大ファイルアップロードサイズを決定します。アップロードは、php-fpmなどのバックエンドに到達する前にNginxを通過します。client intended to send too large bodyのようなエラーが発生した場合、この値が低すぎることを意味します。

nginx_server_names_hash_bucket_size: "64"

多くのサーバー名がある場合や非常に長いサーバー名がある場合、起動時にこの値を増やす必要があるNginxエラーが発生する場合があります。

nginx_proxy_cache_path: ""

nginx.confファイル内のproxy_cache_pathディレクティブとして設定します。デフォルトでは(空文字列にしておけば)この設定はされませんが、Nginxをリバースプロキシとして使用したい場合は、これを有効な値に設定(例:"/var/cache/nginx keys_zone=cache:32m")することでNginxのキャッシュを使用できます(更なるプロキシ設定は、各サーバー構成内で行えます)。

nginx_extra_http_options: ""

nginx.conf内のトップレベルhttpブロックに挿入する追加行。値はリテラルに定義する必要があります(直接nginx.confに挿入するように、Nginxの設定構文に従います - 行の終了には;などを使用します)。例えば:

nginx_extra_http_options: |
  proxy_buffering    off;
  proxy_set_header   X-Real-IP $remote_addr;
  proxy_set_header   X-Scheme $scheme;
  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header   Host $http_host;

配置の詳細については、templates/nginx.conf.j2のテンプレートを参照してください。

nginx_extra_conf_options: ""

nginx.confの上部に挿入する追加行。値はリテラルに定義する必要があります。例えば:

nginx_extra_conf_options: |
  worker_rlimit_nofile 8192;

配置の詳細については、templates/nginx.conf.j2のテンプレートを参照してください。

nginx_log_format: |
  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"'

Nginxのlog_formatオプションを設定します。

nginx_default_release: ""

(Debian/Ubuntu専用)Nginxのインストールのために異なるリポジトリを設定できるようにします。例として、Debianのwheezyリリースを使用しており、新しいバージョンのNginxを取得したい場合、wheezy-backportsリポジトリをインストールしてこの値を設定すると、Ansibleはそれを-tオプションとしてNginxのインストールに使用します。

nginx_ppa_use: false
nginx_ppa_version: stable

(Ubuntu専用)システムのパッケージの代わりに公式のNginx PPAを使用することを許可します。バージョンはstableまたはdevelopmentに設定できます。

nginx_yum_repo_enabled: true

(RedHat/CentOS専用)nginx yumリポジトリのインストールを無効にするには、falseに設定します。これは、デフォルトのOSの安定パッケージを使用したい場合や、Satelliteを使用している場合に必要です。

設定テンプレートのオーバーライド

オプションが公開されていないために変数を通じてカスタマイズできない場合は、バーチャルホスト設定ファイルやnginx.confファイルを生成するために使用されるテンプレートをオーバーライドできます。

nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"

必要があれば、各vhostごとにテンプレートを設定することもできます。

nginx_vhosts:
  - listen: "80 default_server"
    server_name: "site1.example.com"
    root: "/var/www/site1.example.com"
    index: "index.php index.html index.htm"
    template: "{{ playbook_dir }}/templates/site1.example.com.vhost.j2"
  - server_name: "site2.example.com"
    root: "/var/www/site2.example.com"
    index: "index.php index.html index.htm"
    template: "{{ playbook_dir }}/templates/site2.example.com.vhost.j2"

提供されたテンプレートをコピーして変更するか、Jinja2テンプレートの継承を使用して拡張し、変更が必要な特定のテンプレートブロックをオーバーライドできます。

例: Nginx設定でgzipを設定する

nginx_conf_templateをプレイブックディレクトリ内のテンプレートファイルを指すように設定します。

nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"

上記で設定したパスに子テンプレートを作成し、geerlingguy.nginxテンプレートファイルを相対的に拡張します。

{% extends 'roles/geerlingguy.nginx/templates/nginx.conf.j2' %}

{% block http_gzip %}
    gzip on;
    gzip_proxied any;
    gzip_static on;
    gzip_http_version 1.0;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    gzip_comp_level 6;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/xml+rss
        application/xhtml+xml
        application/x-font-ttf
        application/x-font-opentype
        image/svg+xml
        image/x-icon;
    gzip_buffers 16 8k;
    gzip_min_length 512;
{% endblock %}

依存関係

特になし。

サンプルプレイブック

- hosts: server
  roles:
    - { role: geerlingguy.nginx }

ライセンス

MIT / BSD

作者情報

このロールは、2014年にJeff Geerlingによって作成されました。彼はAnsible for DevOpsの著者です。

プロジェクトについて

Nginx installation for Linux, FreeBSD and OpenBSD.

インストール
ansible-galaxy install Shir0kamii.ansible_role_nginx
ライセンス
mit
ダウンロード
76