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_accept
をon
に設定できます。
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の著者です。