repleo.nginx
Ansible角色 - Nginx服务器
该角色安装和配置nginx网络服务器。用户可以指定他们希望应用于网站的任何HTTP配置参数。可以添加任意数量的网站及其配置。
此角色支持letsencrypt SSL,以便轻松安装HTTPS网络服务器。
要求
此角色需要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"
示例
安装nginx,使用所选的HTTP指令,但未配置任何网站:
- 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:
安装nginx,使用与上个示例不同的HTTP指令,但未配置任何网站。
- 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" ] ] ] }
- hosts: all
roles:
注意:每个添加的网站由哈希列表表示,生成的配置填充在/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" ] ] }
- hosts: all
roles:
向现有的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" ] ] ] }
- hosts: all
roles:
注意:如果没有参数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" ] ] ] }
- hosts: all
roles:
注意:ssl密钥和证书应在调用项目的文件目录中可用。
包括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" ] ] ] }
- hosts: all
roles:
处理程序
NGINX角色提供两个处理程序:
- 重载nginx
- 重启nginx
重新加载nginx配置使您可以在不发生停机的情况下更新网络服务器。然而,可能会出现旧进程未更新的情况。重启将确保网络服务器被终止并重新启动,并会导致(短暂的)停机。
示例:
- name: 模板配置文件
template: src=template.j2 dest=/etc/foo.conf
notify:
- 重启nginx
依赖
无
许可证
BSD
作者信息
Repleo,阿姆斯特尔芬,荷兰 -- www.repleo.nl
Jeroen Arnoldus (jeroen@repleo.nl)
原始版本由:
Benno Joy