gortc.nginx

Ansibleロール: Nginx

ビルドステータス

RedHat/CentOS、Debian/Ubuntu、Archlinux、FreeBSDまたはOpenBSDサーバにNginxをインストールします。

このロールは、Nginxのyumリポジトリ(RedHat系システム)、apt(Debian系システム)、pacman(Archlinux)、pkgng(FreeBSD)またはpkg_add(OpenBSD)から最新のNginxをインストールして設定します。このロールがNginxをインストールした後、自分のウェブサイトに合わせた構成をするために、/etc/nginx/conf.d/内に自分の[virtualhost].confファイルを追加する必要があります。

要件

なし。

ロール変数

利用可能な変数は以下に示されており、デフォルト値も記載されています(defaults/main.ymlを参照):

nginx_vhosts: []

Nginxの仮想ホストのvhost定義(サーバーブロック)のリスト。各エントリーは、server_nameに名前を付けた別々の設定ファイルを作成します。空のままにすると、自分自身の仮想ホスト構成を提供する必要があります。利用可能なサーバーオプションについては、defaults/main.yml内のコメント付きの例を参照してください。

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にシンタックスブロックを宣言しています。

インデントに注意してください。最初の行は通常の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の最初のドメインに設定されており、同じドメインのvhostが2つある場合、例えばリダイレクトのために、手動でfilenameを設定しないと、2つ目が1つ目を上書きしてしまいます。

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設定。トラフィックがポーリングスタイルの場合(特にAJAXパワーのサイトでは)、タイムアウトは高く(10秒以上)設定すべきです。逆に、ほとんどのユーザーが数ページを訪れ、その後リクエストを送信しない場合は、低く (<10秒) 設定するべきです。

nginx_server_tokens: "on"

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

nginx_client_max_body_size: "64m"

この値は、最も大きなファイルアップロードの可能性を決定します。アップロードはNginxを通過してからphp-fpmなどのバックエンドに到達します。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_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.confに直接挿入するかのように、Nginxの構文に従います)。例えば:

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はNginxをインストールする際にその値を-tオプションとして使用します。

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のテンプレートファイルをplaybook.ymlに対して相対的に拡張します。

{% 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 gortc.nginx
ライセンス
mit
ダウンロード
101
所有者
Archived, please use @pion (was WebRTC stack in go)