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_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設定。トラフィックがポーリングスタイルの場合(特に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の著者です。