repleo.nginx

Ansible角色 - Nginx服务器

构建状态 Ansible Galaxy

该角色安装和配置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"

示例

  1. 安装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: [] }
  2. 安装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: [] }

注意:请确保传递的HTTP指令有效,因为此角色不会检查指令的有效性。有关详细信息,请参见nginx文档。

  1. 安装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" ] ] ] }

注意:每个添加的网站由哈希列表表示,生成的配置填充在/etc/nginx/sites-available/中,并且从/etc/nginx/sites-enabled/创建相应的符号链接。

特定网站配置的文件名在哈希中用“file_name”键指定,可以在哈希中添加任何有效的服务器指令。

  1. 安装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" ] ] }
  2. 向现有的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" ] ] ] }

注意:如果没有参数create_nginx_conf: true,则该角色将不会覆盖nginx.conf。此选项允许将虚拟主机安装到基于此角色的现有nginx安装上,即使用此角色的不同服务的安装脚本。

  1. 包括密钥安装的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" ] ] ] }

注意:ssl密钥和证书应在调用项目的文件目录中可用。

  1. 包括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" ] ] ] }

处理程序

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

关于项目

Ansible role for installing nginx, including support for SSL, letsencrypt and virtual host deployments

安装
ansible-galaxy install repleo.nginx
许可证
bsd-2-clause
下载
1.5k
拥有者
Continuous delivery and software development experts