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;
这是一个完全填充的 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 提供的 'default' 虚拟主机配置。如果希望基础的 /
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
是每个进程的连接数。将其设置得更高以处理更多的并发连接(请记住,一个连接将持续使用到每个客户端的保持活动超时期间!)。如果希望 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 的缓存(进一步的代理配置可以在单独的服务器配置中完成)。
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)将此设置为 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.yml
的 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
作者信息
该角色由 Jeff Geerling 创建于 2014 年,他是 Ansible for DevOps 的作者。