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 后,您可能需要做额外的设置,例如在 /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;

上面是一个完全配置的 nginx_vhosts 条目的示例,使用 | 来声明 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"

这是一个次要虚拟主机的示例,该虚拟主机将重定向到上述虚拟主机。

注意:如果您有两个虚拟主机使用相同的域名,例如重定向,filename 默认为 server_name 中的第一个域名,您需要手动设置 filename,以便第二个不会覆盖第一个。

nginx_remove_default_vhost: false

是否删除 Nginx 提供的“默认”虚拟主机配置。如果您希望基址 / URL 指向您在单独的 .conf 文件中配置的虚拟主机之一,这非常有用。

nginx_upstreams: []

如果您正在将 Nginx 配置为负载均衡器,您可以使用此变量定义一个或多个上游集。除了定义至少一个上游外,您还需要配置您的一个服务器块以通过定义的上游代理请求(例如 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"

此值决定了允许的最大文件上传,因为上传会在到达如 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.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,而不是系统的包。您可以将版本设置为 stabledevelopment

nginx_yum_repo_enabled: true

(仅适用于 RedHat/CentOS)将此值设置为 false 可禁用 nginx yum 仓库的安装。如果您想要默认的操作系统稳定包,或者使用 Satellite,这可能是必要的。

覆盖配置模板

如果您无法通过变量进行定制,因为没有暴露选项,您可以覆盖用于生成虚拟主机配置文件或 nginx.conf 文件的模板。

nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"

如果需要,您还可以按虚拟主机的基础设置模板。

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"

在您配置的路径中创建子模板,并扩展相对于您 playbook.ymlgeerlingguy.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

作者信息

此角色由 Jeff Geerling 于 2014 年创建,他是 Ansible for DevOps 的作者。

关于项目

Nginx installation for Linux, FreeBSD and OpenBSD.

安装
ansible-galaxy install Shir0kamii.ansible_role_nginx
许可证
mit
下载
76