11 Commits
1.0.2 ... 1.0.4

Author SHA1 Message Date
Emilien Mantel
710b3ad53b New vhost option: manage_local_content 2015-10-19 09:39:51 +02:00
Emilien Mantel
bf1b9950cb Merge pull request #6 from HanXHX/tryfiles
Add feature: override_try_files on vhost
2015-10-17 08:14:12 +02:00
Emilien Mantel
050c16401f Add feature: override_try_files on vhost 2015-10-15 16:21:36 +02:00
Emilien Mantel
eaf4032bc0 Fix jessie and add doc 2015-10-09 17:54:07 +02:00
Emilien Mantel
63fee94d90 Fix boolean values on upstream 2015-10-09 14:36:55 +02:00
Emilien Mantel
a50d7e8774 Test proxy with a real back-end: himself 2015-10-09 14:31:01 +02:00
Emilien Mantel
96bbc47d27 First shot proxy (unstable) 2015-10-08 18:21:40 +02:00
Emilien Mantel
a9a898e910 Test travis docker 2015-10-07 19:31:12 +02:00
Emilien Mantel
edb36acd5d Fix badge 2015-10-07 19:25:57 +02:00
Emilien Mantel
fb0b210d45 Update badge 2015-10-07 19:19:46 +02:00
Emilien Mantel
a02b44a2f0 Add Ansible Galaxy badge 2015-10-07 19:19:09 +02:00
11 changed files with 147 additions and 13 deletions

View File

@@ -2,10 +2,12 @@ env:
- PLATFORM=debian-wheezy - PLATFORM=debian-wheezy
- PLATFORM=debian-jessie - PLATFORM=debian-jessie
sudo: true sudo: required
install: language: python
- curl -sLo - http://j.mp/install-travis-docker | sh -xe
services:
- docker
script: script:
- ./run 'docker build -f tests/$PLATFORM.Dockerfile -t test-$PLATFORM . && docker run --name $PLATFORM test-$PLATFORM' - docker build -f tests/$PLATFORM.Dockerfile -t test-$PLATFORM . && docker run --name $PLATFORM test-$PLATFORM

View File

@@ -1,7 +1,7 @@
Nginx for Debian Ansible role Nginx for Debian Ansible role
============================= =============================
[![Build Status](https://travis-ci.org/HanXHX/ansible-nginx.svg)](https://travis-ci.org/HanXHX/ansible-nginx) [![Ansible Galaxy](http://img.shields.io/badge/ansible--galaxy-HanXHX.nginx-blue.svg)](https://galaxy.ansible.com/list#/roles/4399) [![Build Status](https://travis-ci.org/HanXHX/ansible-nginx.svg)](https://travis-ci.org/HanXHX/ansible-nginx)
Install and configure Nginx on Debian. Install and configure Nginx on Debian.
@@ -47,9 +47,11 @@ Socket:
### Vhost management ### Vhost management
You can see many examples in: [tests/test.yml](tests/test.yml).
- `nginx_vhosts`: List of dict. A vhost has few keys. See bellow. - `nginx_vhosts`: List of dict. A vhost has few keys. See bellow.
#### #### Common
- `name`: (M) List of domain used. The first occurence is the most important! - `name`: (M) List of domain used. The first occurence is the most important!
- `template`: (M) template used to create vhost - `template`: (M) template used to create vhost
@@ -59,6 +61,8 @@ Socket:
- `location`: (O) Add new custom locations (it does not overwrite!) - `location`: (O) Add new custom locations (it does not overwrite!)
- `more`: (O) Add more custom infos. - `more`: (O) Add more custom infos.
- `upstream_params`: (O) Add upstream params (useful when you want to pass variables to PHP) - `upstream_params`: (O) Add upstream params (useful when you want to pass variables to PHP)
- `override_try_files`: (O) overrides default try\_files defined in template
- `manage_local_content`: (O) Boolean. Set to false if you don't want to manage local content (images, css...). This option is useless if you use proxy `template`
(O) : Optional (O) : Optional
(M) : Mandatory (M) : Mandatory
@@ -69,10 +73,48 @@ Socket:
- `php`: PHP base template. Can work with many frameworks/tools. - `php`: PHP base template. Can work with many frameworks/tools.
- `wordpress` - `wordpress`
- `dokuwiki` - `dokuwiki`
- `proxy`
Templates works as parent-child. Templates works as parent-child.
You can see many examples in: [tests/test.yml](tests/test.yml). #### About proxy template
Proxy template allow you to use Nginx as reverse proxy. Usefull when you have application serveur such as Redmine, Jenkins...
You have many key added to vhost key:
- `upstream_name`: (O) upstream name used to pass proxy
- `proxy_params`: (M) list of raw params passed to the vhost
(O) : Optional
(M) : Mandatory
### Upstream management
- `nginx_upstreams`: List of dict. An upstream has few keys. See bellow.
Note: Few params are unavailable on old Nginx version. But this role don't put it if your version is too old!
#### Upstream params
- `name`: upstream name. Can be use in vhost with *proxy_pass http://upstream_name*
- `params`: list of param (hash, zone...)
- `servers`: each upstream MUST have at least 1 server
#### Server params
You must set a `path`. For example: *192.168.0.50:8080* or *unix:/tmp/my.sock*.
All this params are optional. You should see [Nginx upstream doc](http://nginx.org/en/docs/http/ngx_http_upstream_module.html).
- `weight`
- `max`fails`
- `fail`timeout`
- `backup`
- `down`
- `route`
- `slow`start`
Dependencies Dependencies
------------ ------------

View File

@@ -70,3 +70,4 @@ nginx_http:
# etag: 'off' # etag: 'off'
nginx_vhosts: [] nginx_vhosts: []
nginx_upstreams: []

View File

@@ -4,3 +4,7 @@
template: src=etc/nginx/upstream/php.conf.j2 dest=/etc/nginx/conf.d/php.conf template: src=etc/nginx/upstream/php.conf.j2 dest=/etc/nginx/conf.d/php.conf
notify: reload nginx notify: reload nginx
- name: TEMPLATE | Deploy other upstreams
template: src=etc/nginx/upstream/upstream.conf.j2 dest=/etc/nginx/conf.d/upstream-{{ item.name }}.conf
with_items: nginx_upstreams
notify: reload nginx

View File

@@ -8,7 +8,7 @@
group={{ item.group | default('www-data') }} group={{ item.group | default('www-data') }}
mode={{ item.mode | default('0755') }} mode={{ item.mode | default('0755') }}
with_items: nginx_vhosts with_items: nginx_vhosts
when: item.root is not defined when: item.root is not defined and item.template != '_proxy'
- name: TEMPLATE | Create vhosts - name: TEMPLATE | Create vhosts
template: > template: >

View File

@@ -30,7 +30,7 @@ server {
location / { location / {
{% block template_try_files %} {% block template_try_files %}
try_files $uri $uri/ =404; try_files {{ override_try_files | default('$uri $uri/ =404') }};
{% endblock %} {% endblock %}
} }
@@ -43,6 +43,8 @@ server {
deny all; deny all;
} }
{% block template_local_content %}
{% if manage_local_content is defined and not manage_local_content %}
location = /favicon.ico { location = /favicon.ico {
expires 30d; expires 30d;
access_log off; access_log off;
@@ -53,6 +55,8 @@ server {
expires 30d; expires 30d;
log_not_found off; log_not_found off;
} }
{% endif %}
{% endblock %}
{% if __location is iterable and __location | length > 0 %} {% if __location is iterable and __location | length > 0 %}
# --> Custom locations # --> Custom locations

View File

@@ -4,7 +4,7 @@
{% endblock %} {% endblock %}
{% block template_try_files %} {% block template_try_files %}
try_files $uri $uri/ /index.php; try_files {{ override_try_files | default('$uri $uri/ /index.php') }};
{% endblock %} {% endblock %}
{% block template_upstream_location %} {% block template_upstream_location %}

View File

@@ -0,0 +1,23 @@
{% extends "_base.j2" %}
{% block template_try_files %}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://{{ item.upstream_name }};
proxy_read_timeout 90;
{#proxy_redirect http://{{ upstream.name }} https://jenkins.domain.tld;#}
{% if item.proxy_params is defined and item.proxy_params is iterable %}
{% for param in item.proxy_params %}
{{ param }}
{% endfor %}
{% endif %}
{% endblock %}
{# We flush the default local content (locations) #}
{% block template_local_content %}
{% endblock %}

View File

@@ -0,0 +1,19 @@
{%- macro s(key, value, is_bool, min_version) %}
{% if nginx_version.stdout | version_compare(min_version, 'ge') %}
{% if is_bool and value %} {{ key }}{% elif not is_bool %} {{ key }}={{ value }}{% endif %}
{% endif %}
{%- endmacro -%}
#
# {{ ansible_managed }}
#
upstream {{ item.name }} {
{% for server in item.servers %}
server {{ server.path }}{% for p in nginx_upstream_server_params if server[p.key] is defined %}{{ s(p.key, server[p.key] | default(p.default), p.is_bool | default(false), p.min_version | default('0.0.1')) }}{% endfor %};
{% endfor %}
{% if item.params is defined and item.params is iterable %}
{% for param in item.params %}
{{ param }};
{% endfor %}
{% endif %}
}

View File

@@ -8,12 +8,21 @@
- curl - curl
vars: vars:
nginx_php: true nginx_php: true
nginx_upstreams:
- name: 'test'
servers:
- path: '127.0.0.1:80'
max_conns: 150
weight: 10
down: false
nginx_vhosts: nginx_vhosts:
- name: - name:
- 'test.local' - 'test.local'
- 'test-alias.local' - 'test-alias.local'
- 'test2-alias.local' - 'test2-alias.local'
template: '_base' template: '_base'
override_try_files: '$uri $uri index.htm index.html'
manage_local_content: false
more: more:
- 'autoindex off;' - 'autoindex off;'
location: location:
@@ -28,6 +37,12 @@
redirect_from: redirect_from:
- 'www.test-php.local' - 'www.test-php.local'
template: '_php' template: '_php'
- name:
- 'test-proxy.local'
listen:
- 8080
template: '_proxy'
upstream_name: 'test'
- name: - name:
- 'deleted.local' - 'deleted.local'
template: '_base' template: '_base'
@@ -40,7 +55,7 @@
- name: -- Add HTML file -- - name: -- Add HTML file --
copy: dest="{{ nginx_root }}/test.local/public/index.html" content="Index HTML test OK\n" copy: dest="{{ nginx_root }}/test.local/public/index.html" content="Index HTML test OK\n"
- name: -- VERIFY VHOSTS -- - name: -- VERIFY VHOSTS --
shell: "curl -H 'Host: {{ item.name[0] }}' http://127.0.0.1/" shell: "curl -H 'Host: {{ item.name[0] }}' http://127.0.0.1{% if item.listen is defined and item.listen is iterable %}:{{ item.listen[0] }}{% endif %}/"
with_items: nginx_vhosts with_items: nginx_vhosts
when: item.delete is undefined or not item.delete when: item.delete is undefined or not item.delete
changed_when: false changed_when: false

View File

@@ -1 +1,25 @@
nginx_dh_path: /etc/nginx/ssl/dhparams.pem nginx_dh_path: /etc/nginx/ssl/dhparams.pem
nginx_upstream_server_params:
- key: 'weight'
default: 1
- key: 'max_fails'
default: 1
- key: 'fail_timeout'
default: '10s'
- key: 'backup'
is_bool: true
- key: 'down'
is_bool: true
default: false
- key: 'route'
default: 'configuration_error'
- key: 'slow_start'
default: 0
# Nginx Plus only
# - key: 'max_conns'
# default: 0
# min_version: '1.5.9'
# - key: 'resolve'
# is_bool: true
# min_version: '1.5.12'