create role nginx
This commit is contained in:
parent
8bc03f07a6
commit
8263290abd
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
*.retry
|
||||
*/__pycache__
|
||||
*.pyc
|
30
.travis.yml
Normal file
30
.travis.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
language: python
|
||||
services: docker
|
||||
|
||||
env:
|
||||
global:
|
||||
- ROLE_NAME: nginx
|
||||
matrix:
|
||||
- MOLECULE_DISTRO: centos7
|
||||
- MOLECULE_DISTRO: ubuntu1804
|
||||
- MOLECULE_DISTRO: ubuntu1604
|
||||
- MOLECULE_DISTRO: debian9
|
||||
- MOLECULE_DISTRO: debian8
|
||||
|
||||
install:
|
||||
# Install test dependencies.
|
||||
- pip install molecule docker
|
||||
|
||||
before_script:
|
||||
# Use actual Ansible Galaxy role name for the project directory.
|
||||
- cd ../
|
||||
- mv ansible-role-$ROLE_NAME geerlingguy.$ROLE_NAME
|
||||
- cd geerlingguy.$ROLE_NAME
|
||||
|
||||
script:
|
||||
# Run tests.
|
||||
- molecule test
|
||||
|
||||
notifications:
|
||||
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
20
LICENSE
Normal file
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 Jeff Geerling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
236
README.md
Normal file
236
README.md
Normal file
@ -0,0 +1,236 @@
|
||||
# Ansible Role: Nginx
|
||||
|
||||
[![Build Status](https://travis-ci.org/geerlingguy/ansible-role-nginx.svg?branch=master)](https://travis-ci.org/geerlingguy/ansible-role-nginx)
|
||||
|
||||
**Note:** Please consider using the official [NGINX Ansible role](https://github.com/nginxinc/ansible-role-nginx) from NGINX, Inc.
|
||||
|
||||
Installs Nginx on RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD or OpenBSD servers.
|
||||
|
||||
This role installs and configures the latest version of Nginx from the Nginx yum repository (on RedHat-based systems), apt (on Debian-based systems), pacman (Archlinux), pkgng (on FreeBSD systems) or pkg_add (on OpenBSD systems). You will likely need to do extra setup work after this role has installed Nginx, like adding your own [virtualhost].conf file inside `/etc/nginx/conf.d/`, describing the location and options to use for your particular website.
|
||||
|
||||
## Requirements
|
||||
|
||||
None.
|
||||
|
||||
## Role Variables
|
||||
|
||||
Available variables are listed below, along with default values (see `defaults/main.yml`):
|
||||
|
||||
nginx_vhosts: []
|
||||
|
||||
A list of vhost definitions (server blocks) for Nginx virtual hosts. Each entry will create a separate config file named by `server_name`. If left empty, you will need to supply your own virtual host configuration. See the commented example in `defaults/main.yml` for available server options. If you have a large number of customizations required for your server definition(s), you're likely better off managing the vhost configuration file yourself, leaving this variable set to `[]`.
|
||||
|
||||
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;
|
||||
|
||||
An example of a fully-populated nginx_vhosts entry, using a `|` to declare a block of syntax for the `extra_parameters`.
|
||||
|
||||
Please take note of the indentation in the above block. The first line should be a normal 2-space indent. All other lines should be indented normally relative to that line. In the generated file, the entire block will be 4-space indented. This style will ensure the config file is indented correctly.
|
||||
|
||||
- listen: "80"
|
||||
server_name: "example.com www.example.com"
|
||||
return: "301 https://example.com$request_uri"
|
||||
filename: "example.com.80.conf"
|
||||
|
||||
An example of a secondary vhost which will redirect to the one shown above.
|
||||
|
||||
*Note: The `filename` defaults to the first domain in `server_name`, if you have two vhosts with the same domain, eg. a redirect, you need to manually set the `filename` so the second one doesn't override the first one*
|
||||
|
||||
nginx_remove_default_vhost: false
|
||||
|
||||
Whether to remove the 'default' virtualhost configuration supplied by Nginx. Useful if you want the base `/` URL to be directed at one of your own virtual hosts configured in a separate .conf file.
|
||||
|
||||
nginx_upstreams: []
|
||||
|
||||
If you are configuring Nginx as a load balancer, you can define one or more upstream sets using this variable. In addition to defining at least one upstream, you would need to configure one of your server blocks to proxy requests through the defined upstream (e.g. `proxy_pass http://myapp1;`). See the commented example in `defaults/main.yml` for more information.
|
||||
|
||||
nginx_user: "nginx"
|
||||
|
||||
The user under which Nginx will run. Defaults to `nginx` for RedHat, `www-data` for Debian and `www` on FreeBSD and OpenBSD.
|
||||
|
||||
nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
|
||||
nginx_worker_connections: "1024"
|
||||
nginx_multi_accept: "off"
|
||||
|
||||
`nginx_worker_processes` should be set to the number of cores present on your machine (if the default is incorrect, find this number with `grep processor /proc/cpuinfo | wc -l`). `nginx_worker_connections` is the number of connections per process. Set this higher to handle more simultaneous connections (and remember that a connection will be used for as long as the keepalive timeout duration for every client!). You can set `nginx_multi_accept` to `on` if you want Nginx to accept all connections immediately.
|
||||
|
||||
nginx_error_log: "/var/log/nginx/error.log warn"
|
||||
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"
|
||||
|
||||
Configuration of the default error and access logs. Set to `off` to disable a log entirely.
|
||||
|
||||
nginx_sendfile: "on"
|
||||
nginx_tcp_nopush: "on"
|
||||
nginx_tcp_nodelay: "on"
|
||||
|
||||
TCP connection options. See [this blog post](https://t37.net/nginx-optimization-understanding-sendfile-tcp_nodelay-and-tcp_nopush.html) for more information on these directives.
|
||||
|
||||
nginx_keepalive_timeout: "65"
|
||||
nginx_keepalive_requests: "100"
|
||||
|
||||
Nginx keepalive settings. Timeout should be set higher (10s+) if you have more polling-style traffic (AJAX-powered sites especially), or lower (<10s) if you have a site where most users visit a few pages and don't send any further requests.
|
||||
|
||||
nginx_server_tokens: "on"
|
||||
|
||||
Nginx server_tokens settings. Controls whether nginx responds with it's version in HTTP headers. Set to `"off"` to disable.
|
||||
|
||||
nginx_client_max_body_size: "64m"
|
||||
|
||||
This value determines the largest file upload possible, as uploads are passed through Nginx before hitting a backend like `php-fpm`. If you get an error like `client intended to send too large body`, it means this value is set too low.
|
||||
|
||||
nginx_server_names_hash_bucket_size: "64"
|
||||
|
||||
If you have many server names, or have very long server names, you might get an Nginx error on startup requiring this value to be increased.
|
||||
|
||||
nginx_proxy_cache_path: ""
|
||||
|
||||
Set as the `proxy_cache_path` directive in the `nginx.conf` file. By default, this will not be configured (if left as an empty string), but if you wish to use Nginx as a reverse proxy, you can set this to a valid value (e.g. `"/var/cache/nginx keys_zone=cache:32m"`) to use Nginx's cache (further proxy configuration can be done in individual server configurations).
|
||||
|
||||
nginx_extra_http_options: ""
|
||||
|
||||
Extra lines to be inserted in the top-level `http` block in `nginx.conf`. The value should be defined literally (as you would insert it directly in the `nginx.conf`, adhering to the Nginx configuration syntax - such as `;` for line termination, etc.), for example:
|
||||
|
||||
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;
|
||||
|
||||
See the template in `templates/nginx.conf.j2` for more details on the placement.
|
||||
|
||||
nginx_extra_conf_options: ""
|
||||
|
||||
Extra lines to be inserted in the top of `nginx.conf`. The value should be defined literally (as you would insert it directly in the `nginx.conf`, adhering to the Nginx configuration syntax - such as `;` for line termination, etc.), for example:
|
||||
|
||||
nginx_extra_conf_options: |
|
||||
worker_rlimit_nofile 8192;
|
||||
|
||||
See the template in `templates/nginx.conf.j2` for more details on the placement.
|
||||
|
||||
nginx_log_format: |-
|
||||
'$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"'
|
||||
|
||||
Configures Nginx's [`log_format`](http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format). options.
|
||||
|
||||
nginx_default_release: ""
|
||||
|
||||
(For Debian/Ubuntu only) Allows you to set a different repository for the installation of Nginx. As an example, if you are running Debian's wheezy release, and want to get a newer version of Nginx, you can install the `wheezy-backports` repository and set that value here, and Ansible will use that as the `-t` option while installing Nginx.
|
||||
|
||||
nginx_ppa_use: false
|
||||
nginx_ppa_version: stable
|
||||
|
||||
(For Ubuntu only) Allows you to use the official Nginx PPA instead of the system's package. You can set the version to `stable` or `development`.
|
||||
|
||||
nginx_yum_repo_enabled: true
|
||||
|
||||
(For RedHat/CentOS only) Set this to `false` to disable the installation of the `nginx` yum repository. This could be necessary if you want the default OS stable packages, or if you use Satellite.
|
||||
|
||||
## Overriding configuration templates
|
||||
|
||||
If you can't customize via variables because an option isn't exposed, you can override the template used to generate the virtualhost configuration files or the `nginx.conf` file.
|
||||
|
||||
```yaml
|
||||
nginx_conf_template: "nginx.conf.j2"
|
||||
nginx_vhost_template: "vhost.j2"
|
||||
```
|
||||
|
||||
If necessary you can also set the template on a per vhost basis.
|
||||
|
||||
```yaml
|
||||
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"
|
||||
```
|
||||
|
||||
You can either copy and modify the provided template, or extend it with [Jinja2 template inheritance](http://jinja.pocoo.org/docs/2.9/templates/#template-inheritance) and override the specific template block you need to change.
|
||||
|
||||
### Example: Configure gzip in nginx configuration
|
||||
|
||||
Set the `nginx_conf_template` to point to a template file in your playbook directory.
|
||||
|
||||
```yaml
|
||||
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
|
||||
```
|
||||
|
||||
Create the child template in the path you configured above and extend `geerlingguy.nginx` template file relative to your `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 %}
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
None.
|
||||
|
||||
## Example Playbook
|
||||
|
||||
- hosts: server
|
||||
roles:
|
||||
- { role: geerlingguy.nginx }
|
||||
|
||||
## License
|
||||
|
||||
MIT / BSD
|
||||
|
||||
## Author Information
|
||||
|
||||
This role was created in 2014 by [Jeff Geerling](https://www.jeffgeerling.com/), author of [Ansible for DevOps](https://www.ansiblefordevops.com/).
|
@ -0,0 +1,89 @@
|
||||
---
|
||||
# Used only for Debian/Ubuntu installation, as the -t option for apt.
|
||||
nginx_default_release: ""
|
||||
|
||||
# Used only for Redhat installation, enables source Nginx repo.
|
||||
nginx_yum_repo_enabled: true
|
||||
|
||||
# Use the official Nginx PPA for Ubuntu, and the version to use if so.
|
||||
nginx_ppa_use: false
|
||||
nginx_ppa_version: stable
|
||||
|
||||
# The name of the nginx package to install.
|
||||
nginx_package_name: "nginx"
|
||||
|
||||
nginx_conf_template: "nginx.conf.j2"
|
||||
nginx_vhost_template: "vhost.j2"
|
||||
|
||||
nginx_worker_processes: >-
|
||||
"{{ ansible_processor_vcpus | default(ansible_processor_count) }}"
|
||||
nginx_worker_connections: "1024"
|
||||
nginx_multi_accept: "off"
|
||||
|
||||
nginx_error_log: "/var/log/nginx/error.log warn"
|
||||
nginx_access_log: "/var/log/nginx/access.log main buffer=16k flush=2m"
|
||||
|
||||
nginx_sendfile: "on"
|
||||
nginx_tcp_nopush: "on"
|
||||
nginx_tcp_nodelay: "on"
|
||||
|
||||
nginx_keepalive_timeout: "65"
|
||||
nginx_keepalive_requests: "100"
|
||||
|
||||
nginx_server_tokens: "on"
|
||||
|
||||
nginx_client_max_body_size: "64m"
|
||||
|
||||
nginx_server_names_hash_bucket_size: "64"
|
||||
|
||||
nginx_proxy_cache_path: ""
|
||||
|
||||
nginx_extra_conf_options: ""
|
||||
# Example extra main options, used within the main nginx's context:
|
||||
# nginx_extra_conf_options: |
|
||||
# env VARIABLE;
|
||||
# include /etc/nginx/main.d/*.conf;
|
||||
|
||||
nginx_extra_http_options: ""
|
||||
# Example extra http options, printed inside the main server http config:
|
||||
# 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;
|
||||
|
||||
nginx_remove_default_vhost: false
|
||||
nginx_vhosts: []
|
||||
# Example vhost below, showing all available options:
|
||||
# - listen: "80" # default: "80"
|
||||
# server_name: "example.com" # default: N/A
|
||||
# root: "/var/www/example.com" # default: N/A
|
||||
# index: "index.html index.htm" # default: "index.html index.htm"
|
||||
# filename: "example.com.conf" # Can be used to set the vhost filename.
|
||||
#
|
||||
# # Properties that are only added if defined:
|
||||
# server_name_redirect: "www.example.com" # default: N/A
|
||||
# error_page: ""
|
||||
# access_log: ""
|
||||
# error_log: ""
|
||||
# extra_parameters: "" # Can be used to add extra config blocks (multiline).
|
||||
# template: "" # Can be used to override the `nginx_vhost_template` per host.
|
||||
# state: "absent" # To remove the vhost configuration.
|
||||
|
||||
nginx_upstreams: []
|
||||
# - name: myapp1
|
||||
# strategy: "ip_hash" # "least_conn", etc.
|
||||
# keepalive: 16 # optional
|
||||
# servers: {
|
||||
# "srv1.example.com",
|
||||
# "srv2.example.com weight=3",
|
||||
# "srv3.example.com"
|
||||
# }
|
||||
|
||||
nginx_log_format: |-
|
||||
'$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"'
|
||||
|
||||
nginx_realIP_Proxy: None
|
@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: restart nginx
|
||||
service: name=nginx state=restarted
|
||||
|
||||
- name: validate nginx configuration
|
||||
command: nginx -t -c /etc/nginx/nginx.conf
|
||||
changed_when: false
|
||||
|
||||
- name: reload nginx
|
||||
service: name=nginx state=reloaded
|
1
meta/.galaxy_install_info
Normal file
1
meta/.galaxy_install_info
Normal file
@ -0,0 +1 @@
|
||||
{install_date: 'Sun Apr 14 10:06:52 2019', version: 2.6.2}
|
@ -0,0 +1,43 @@
|
||||
---
|
||||
dependencies: []
|
||||
|
||||
galaxy_info:
|
||||
author: geerlingguy
|
||||
description: Nginx installation for Linux, FreeBSD and OpenBSD.
|
||||
company: "Midwestern Mac, LLC"
|
||||
license: "license (BSD, MIT)"
|
||||
min_ansible_version: 2.4
|
||||
platforms:
|
||||
- name: EL
|
||||
versions:
|
||||
- 6
|
||||
- 7
|
||||
- name: Debian
|
||||
versions:
|
||||
- all
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- trusty
|
||||
- xenial
|
||||
- name: Archlinux
|
||||
versions:
|
||||
- all
|
||||
- name: FreeBSD
|
||||
versions:
|
||||
- 10.3
|
||||
- 10.2
|
||||
- 10.1
|
||||
- 10.0
|
||||
- 9.3
|
||||
- name: OpenBSD
|
||||
versions:
|
||||
- 5.9
|
||||
- 6.0
|
||||
galaxy_tags:
|
||||
- development
|
||||
- web
|
||||
- nginx
|
||||
- reverse
|
||||
- proxy
|
||||
- load
|
||||
- balancer
|
29
molecule/default/molecule.yml
Normal file
29
molecule/default/molecule.yml
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: docker
|
||||
lint:
|
||||
name: yamllint
|
||||
options:
|
||||
config-file: molecule/default/yaml-lint.yml
|
||||
platforms:
|
||||
- name: instance
|
||||
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
|
||||
command: ${MOLECULE_DOCKER_COMMAND:-""}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
||||
privileged: true
|
||||
pre_build_image: true
|
||||
provisioner:
|
||||
name: ansible
|
||||
lint:
|
||||
name: ansible-lint
|
||||
playbooks:
|
||||
converge: ${MOLECULE_PLAYBOOK:-playbook.yml}
|
||||
scenario:
|
||||
name: default
|
||||
verifier:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
19
molecule/default/playbook.yml
Normal file
19
molecule/default/playbook.yml
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
|
||||
vars:
|
||||
nginx_use_ppa: true
|
||||
nginx_remove_default_vhost: true
|
||||
nginx_vhosts:
|
||||
- server_name: "test.dev"
|
||||
root: "/var/www/test"
|
||||
|
||||
pre_tasks:
|
||||
- name: Update apt cache.
|
||||
apt: update_cache=yes cache_valid_time=600
|
||||
when: ansible_os_family == 'Debian'
|
||||
changed_when: false
|
||||
|
||||
roles:
|
||||
- role: geerlingguy.nginx
|
14
molecule/default/tests/test_default.py
Normal file
14
molecule/default/tests/test_default.py
Normal file
@ -0,0 +1,14 @@
|
||||
import os
|
||||
|
||||
import testinfra.utils.ansible_runner
|
||||
|
||||
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
|
||||
|
||||
|
||||
def test_hosts_file(host):
|
||||
f = host.file('/etc/hosts')
|
||||
|
||||
assert f.exists
|
||||
assert f.user == 'root'
|
||||
assert f.group == 'root'
|
6
molecule/default/yaml-lint.yml
Normal file
6
molecule/default/yaml-lint.yml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
extends: default
|
||||
rules:
|
||||
line-length:
|
||||
max: 120
|
||||
level: warning
|
@ -0,0 +1,57 @@
|
||||
---
|
||||
# Variable setup.
|
||||
- name: Include OS-specific variables.
|
||||
include_vars: "{{ ansible_os_family }}.yml"
|
||||
|
||||
- name: Define nginx_user.
|
||||
set_fact:
|
||||
nginx_user: "{{ __nginx_user }}"
|
||||
when: nginx_user is not defined
|
||||
|
||||
# Setup/install tasks.
|
||||
- include_tasks: setup-RedHat.yml
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
- include_tasks: setup-Ubuntu.yml
|
||||
when: ansible_distribution == 'Ubuntu'
|
||||
|
||||
- include_tasks: setup-Debian.yml
|
||||
when: ansible_os_family == 'Debian'
|
||||
|
||||
- include_tasks: setup-FreeBSD.yml
|
||||
when: ansible_os_family == 'FreeBSD'
|
||||
|
||||
- include_tasks: setup-OpenBSD.yml
|
||||
when: ansible_os_family == 'OpenBSD'
|
||||
|
||||
- include_tasks: setup-Archlinux.yml
|
||||
when: ansible_os_family == 'Archlinux'
|
||||
|
||||
# Vhost configuration.
|
||||
- import_tasks: vhosts.yml
|
||||
|
||||
# Nginx setup.
|
||||
- name: Copy nginx configuration in place.
|
||||
template:
|
||||
src: "{{ nginx_conf_template }}"
|
||||
dest: "{{ nginx_conf_file_path }}"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0644
|
||||
notify:
|
||||
- reload nginx
|
||||
|
||||
- name: Copy configuration file for realip
|
||||
template:
|
||||
src: "realip.conf.j2"
|
||||
dest: "{{ nginx_conf_path }}/realip.conf"
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0644
|
||||
notify:
|
||||
- reload nginx
|
||||
when: nginx_realIP_Proxy is defined
|
||||
|
||||
- name: Ensure nginx is started and enabled to start at boot.
|
||||
service: name=nginx state=started enabled=yes
|
||||
|
5
tasks/setup-Archlinux.yml
Normal file
5
tasks/setup-Archlinux.yml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Ensure nginx is installed.
|
||||
pacman:
|
||||
name: "{{ nginx_package_name }}"
|
||||
state: present
|
10
tasks/setup-Debian.yml
Normal file
10
tasks/setup-Debian.yml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: Update apt cache.
|
||||
apt: update_cache=yes cache_valid_time=86400
|
||||
changed_when: false
|
||||
|
||||
- name: Ensure nginx is installed.
|
||||
apt:
|
||||
name: "{{ nginx_package_name }}"
|
||||
state: present
|
||||
default_release: "{{ nginx_default_release }}"
|
13
tasks/setup-FreeBSD.yml
Normal file
13
tasks/setup-FreeBSD.yml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Update pkg cache.
|
||||
shell: pkg update -f
|
||||
|
||||
- name: Ensure nginx is installed.
|
||||
pkgng:
|
||||
name: "{{ nginx_package_name }}"
|
||||
state: present
|
||||
|
||||
- name: Create logs directory.
|
||||
file:
|
||||
path: /var/log/nginx
|
||||
state: directory
|
10
tasks/setup-OpenBSD.yml
Normal file
10
tasks/setup-OpenBSD.yml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: Ensure nginx is installed.
|
||||
openbsd_pkg:
|
||||
name: "{{ nginx_package_name }}"
|
||||
state: present
|
||||
|
||||
- name: Create logs directory.
|
||||
file:
|
||||
path: /var/log/nginx
|
||||
state: directory
|
14
tasks/setup-RedHat.yml
Normal file
14
tasks/setup-RedHat.yml
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Enable nginx repo.
|
||||
template:
|
||||
src: nginx.repo.j2
|
||||
dest: /etc/yum.repos.d/nginx.repo
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0644
|
||||
when: nginx_yum_repo_enabled
|
||||
|
||||
- name: Ensure nginx is installed.
|
||||
yum:
|
||||
name: "{{ nginx_package_name }}"
|
||||
state: present
|
14
tasks/setup-Ubuntu.yml
Normal file
14
tasks/setup-Ubuntu.yml
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Add PPA for Nginx.
|
||||
apt_repository:
|
||||
repo: 'ppa:nginx/{{ nginx_ppa_version }}'
|
||||
state: present
|
||||
update_cache: true
|
||||
register: nginx_ppa_added
|
||||
when: nginx_ppa_use
|
||||
|
||||
- name: Ensure nginx will reinstall if the PPA was just added.
|
||||
apt:
|
||||
name: nginx
|
||||
state: absent
|
||||
when: nginx_ppa_added.changed
|
43
tasks/vhosts.yml
Normal file
43
tasks/vhosts.yml
Normal file
@ -0,0 +1,43 @@
|
||||
---
|
||||
- name: Remove default nginx vhost config file (if configured).
|
||||
file:
|
||||
path: "{{ nginx_default_vhost_path }}"
|
||||
state: absent
|
||||
when: nginx_remove_default_vhost
|
||||
notify: restart nginx
|
||||
|
||||
- name: Ensure nginx_vhost_path exists.
|
||||
file:
|
||||
path: "{{ nginx_vhost_path }}"
|
||||
state: directory
|
||||
notify: reload nginx
|
||||
|
||||
- name: Add managed vhost config files.
|
||||
template:
|
||||
src: "{{ item.template|default(nginx_vhost_template) }}"
|
||||
dest: "{{ nginx_vhost_path }}/{{ item.filename|default(item.server_name.split(' ')[0] ~ '.conf') }}"
|
||||
force: true
|
||||
owner: root
|
||||
group: "{{ root_group }}"
|
||||
mode: 0644
|
||||
when: item.state|default('present') != 'absent'
|
||||
with_items: "{{ nginx_vhosts }}"
|
||||
notify: reload nginx
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
- name: Remove managed vhost config files.
|
||||
file:
|
||||
path: "{{ nginx_vhost_path }}/{{ item.filename|default(item.server_name.split(' ')[0] ~ '.conf') }}"
|
||||
state: absent
|
||||
when: item.state|default('present') == 'absent'
|
||||
with_items: "{{ nginx_vhosts }}"
|
||||
notify: reload nginx
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
- name: Remove legacy vhosts.conf file.
|
||||
file:
|
||||
path: "{{ nginx_vhost_path }}/vhosts.conf"
|
||||
state: absent
|
||||
notify: reload nginx
|
81
templates/nginx.conf.j2
Normal file
81
templates/nginx.conf.j2
Normal file
@ -0,0 +1,81 @@
|
||||
user {{ nginx_user }};
|
||||
|
||||
error_log {{ nginx_error_log }};
|
||||
#pid {{ nginx_pidfile }};
|
||||
|
||||
{% block worker %}
|
||||
worker_processes {{ nginx_worker_processes }};
|
||||
{% endblock %}
|
||||
|
||||
{% if nginx_extra_conf_options %}
|
||||
{{ nginx_extra_conf_options }}
|
||||
{% endif %}
|
||||
|
||||
{% block events %}
|
||||
events {
|
||||
worker_connections {{ nginx_worker_connections }};
|
||||
multi_accept {{ nginx_multi_accept }};
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
http {
|
||||
{% block http_begin %}{% endblock %}
|
||||
|
||||
{% block http_basic %}
|
||||
include {{ nginx_mime_file_path }};
|
||||
default_type application/octet-stream;
|
||||
|
||||
server_names_hash_bucket_size {{ nginx_server_names_hash_bucket_size }};
|
||||
|
||||
client_max_body_size {{ nginx_client_max_body_size }};
|
||||
|
||||
log_format main {{ nginx_log_format|indent(23) }};
|
||||
|
||||
access_log {{ nginx_access_log }};
|
||||
|
||||
sendfile {{ nginx_sendfile }};
|
||||
tcp_nopush {{ nginx_tcp_nopush }};
|
||||
tcp_nodelay {{ nginx_tcp_nodelay }};
|
||||
|
||||
keepalive_timeout {{ nginx_keepalive_timeout }};
|
||||
keepalive_requests {{ nginx_keepalive_requests }};
|
||||
|
||||
server_tokens {{ nginx_server_tokens }};
|
||||
{% if nginx_proxy_cache_path %}
|
||||
proxy_cache_path {{ nginx_proxy_cache_path }};
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block http_gzip %}
|
||||
# gzip on;
|
||||
{% endblock %}
|
||||
|
||||
{% if nginx_extra_http_options %}
|
||||
{{ nginx_extra_http_options|indent(4, False) }}
|
||||
{% endif %}
|
||||
|
||||
{% block http_upstream %}
|
||||
{% for upstream in nginx_upstreams %}
|
||||
upstream {{ upstream.name }} {
|
||||
{% if upstream.strategy is defined %}
|
||||
{{ upstream.strategy }};
|
||||
{% endif %}
|
||||
{% for server in upstream.servers %}
|
||||
server {{ server }};
|
||||
{% endfor %}
|
||||
{% if upstream.keepalive is defined %}
|
||||
keepalive {{ upstream.keepalive }};
|
||||
{% endif %}
|
||||
}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block http_includes %}
|
||||
include {{ nginx_conf_path }}/*.conf;
|
||||
{% if nginx_conf_path != nginx_vhost_path %}
|
||||
include {{ nginx_vhost_path }}/*;
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block http_end %}{% endblock %}
|
||||
}
|
5
templates/nginx.repo.j2
Normal file
5
templates/nginx.repo.j2
Normal file
@ -0,0 +1,5 @@
|
||||
[nginx]
|
||||
name=nginx repo
|
||||
baseurl=http://nginx.org/packages/centos/{{ ansible_distribution_major_version }}/$basearch/
|
||||
gpgcheck=0
|
||||
enabled=1
|
2
templates/realip.conf.j2
Normal file
2
templates/realip.conf.j2
Normal file
@ -0,0 +1,2 @@
|
||||
set_real_ip_from {{ nginx_realIP_Proxy }};
|
||||
real_ip_header X-Forwarded-For;
|
47
templates/vhost.j2
Normal file
47
templates/vhost.j2
Normal file
@ -0,0 +1,47 @@
|
||||
{% block server_redirect %}
|
||||
{% if item.server_name_redirect is defined %}
|
||||
server {
|
||||
listen {{ item.listen | default('80') }};
|
||||
server_name {{ item.server_name_redirect }};
|
||||
return 301 $scheme://{{ item.server_name.split(' ')[0] }}$request_uri;
|
||||
}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
server {
|
||||
{% block server_begin %}{% endblock %}
|
||||
|
||||
{% block server_basic -%}
|
||||
listen {{ item.listen | default('80') }};
|
||||
|
||||
{% if item.server_name is defined %}
|
||||
server_name {{ item.server_name }};
|
||||
{% endif %}
|
||||
|
||||
{% if item.root is defined %}
|
||||
root {{ item.root }};
|
||||
{% endif %}
|
||||
|
||||
index {{ item.index | default('index.html index.htm') }};
|
||||
|
||||
{% if item.error_page is defined %}
|
||||
error_page {{ item.error_page }};
|
||||
{% endif %}
|
||||
{% if item.access_log is defined %}
|
||||
access_log {{ item.access_log }};
|
||||
{% endif %}
|
||||
{% if item.error_log is defined %}
|
||||
error_log {{ item.error_log }} error;
|
||||
{% endif %}
|
||||
|
||||
{% if item.return is defined %}
|
||||
return {{ item.return }};
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block server_end %}{% endblock %}
|
||||
|
||||
{% if item.extra_parameters is defined %}
|
||||
{{ item.extra_parameters|indent(4) }}
|
||||
{% endif %}
|
||||
}
|
9
vars/Archlinux.yml
Normal file
9
vars/Archlinux.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
root_group: root
|
||||
nginx_conf_path: /etc/nginx/conf.d
|
||||
nginx_conf_file_path: /etc/nginx/nginx.conf
|
||||
nginx_mime_file_path: /etc/nginx/mime.types
|
||||
nginx_pidfile: /run/nginx.pid
|
||||
nginx_vhost_path: /etc/nginx/sites-enabled
|
||||
nginx_default_vhost_path: /etc/nginx/sites-enabled/default
|
||||
__nginx_user: "http"
|
9
vars/Debian.yml
Normal file
9
vars/Debian.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
root_group: root
|
||||
nginx_conf_path: /etc/nginx/conf.d
|
||||
nginx_conf_file_path: /etc/nginx/nginx.conf
|
||||
nginx_mime_file_path: /etc/nginx/mime.types
|
||||
nginx_pidfile: /run/nginx.pid
|
||||
nginx_vhost_path: /etc/nginx/sites-enabled
|
||||
nginx_default_vhost_path: /etc/nginx/sites-enabled/default
|
||||
__nginx_user: "www-data"
|
9
vars/FreeBSD.yml
Normal file
9
vars/FreeBSD.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
root_group: wheel
|
||||
nginx_conf_path: /usr/local/etc/nginx/conf.d
|
||||
nginx_conf_file_path: /usr/local/etc/nginx/nginx.conf
|
||||
nginx_mime_file_path: /usr/local/etc/nginx/mime.types
|
||||
nginx_pidfile: /var/run/nginx.pid
|
||||
nginx_vhost_path: /usr/local/etc/nginx/sites-enabled
|
||||
nginx_default_vhost_path: /usr/local/etc/nginx/sites-enabled/default
|
||||
__nginx_user: "www"
|
10
vars/OpenBSD.yml
Normal file
10
vars/OpenBSD.yml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
root_group: wheel
|
||||
nginx_conf_path: /etc/nginx/conf.d
|
||||
nginx_conf_file_path: /etc/nginx/nginx.conf
|
||||
nginx_mime_file_path: /etc/nginx/mime.types
|
||||
nginx_pidfile: /var/run/nginx.pid
|
||||
nginx_vhost_path: /etc/nginx/sites-enabled
|
||||
nginx_default_vhost_path: /etc/nginx/sites-enabled/default
|
||||
nginx_package_name: "nginx--"
|
||||
__nginx_user: "www"
|
9
vars/RedHat.yml
Normal file
9
vars/RedHat.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
root_group: root
|
||||
nginx_conf_path: /etc/nginx/conf.d
|
||||
nginx_conf_file_path: /etc/nginx/nginx.conf
|
||||
nginx_mime_file_path: /etc/nginx/mime.types
|
||||
nginx_pidfile: /var/run/nginx.pid
|
||||
nginx_vhost_path: /etc/nginx/conf.d
|
||||
nginx_default_vhost_path: /etc/nginx/conf.d/default.conf
|
||||
__nginx_user: "nginx"
|
Loading…
Reference in New Issue
Block a user