sorrowless.nginx
sbog/nginx
Diese Rolle installiert und konfiguriert den nginx-Webserver. Der Benutzer kann beliebige HTTP-Konfigurationsparameter angeben, die er auf seiner Seite anwenden möchte. Es können beliebig viele Seiten mit den gewünschten Konfigurationen hinzugefügt werden.
Anforderungen
Diese Rolle benötigt Ansible 2.4 oder höher und die Plattformanforderungen sind in der Metadaten-Datei aufgeführt. (Einige ältere Versionen der Rolle unterstützen Ansible 1.4) Für FreeBSD ist eine funktionierende pkgng-Einrichtung erforderlich (siehe: https://www.freebsd.org/doc/handbook/pkgng-intro.html). Die Installation des Nginx Amplify-Agenten wird nur für CentOS, RedHat, Amazon, Debian und Ubuntu-Distributionen unterstützt.
Installation
ansible-galaxy install sorrowless.nginx
Rollenspezifische Variablen
Die Variablen, die für diese Rolle übergeben werden können, sowie eine kurze Beschreibung sind wie folgt. (Für alle Variablen, siehe defaults/main.yml)
# Der Benutzer, der nginx ausführen soll
nginx_user: "www-data"
# Eine Liste von Direktiven für den Abschnitt events.
nginx_events_params:
- worker_connections 512
- debug_connection 127.0.0.1
- use epoll
- multi_accept on
# Eine Liste von Hashes, die die Server für nginx definieren,
# sowie HTTP-Parameter. Alle gültigen Serverparameter
# können hier definiert werden.
nginx_sites:
default:
- listen 80
- server_name _
- root "/usr/share/nginx/html"
- index index.html
foo:
- listen 8080
- server_name localhost
- root "/tmp/site1"
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root "/tmp/site2"
- location / { try_files $uri $uri/ /index.html; }
- location /images/ {
try_files $uri $uri/ /index.html;
allow 127.0.0.1;
deny all;
}
# Eine Liste von Hashes, die zusätzliche Konfigurationen definieren
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
upstream:
- upstream foo { server 127.0.0.1:8080 weight=10; }
geo:
- geo $local {
default 0;
127.0.0.1 1;
}
gzip:
- gzip on
- gzip_disable msie6
# Eine Liste von Hashes, die Konfigurationssnippets definieren
nginx_snippets:
error_pages:
- error_page 500 /http_errors/500.html
- error_page 502 /http_errors/502.html
- error_page 503 /http_errors/503.html
- error_page 504 /http_errors/504.html
# Eine Liste von Hashes, die Benutzer-/Passwortdateien definieren
nginx_auth_basic_files:
demo:
- foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , erzeugt von : htpasswd -nb foo demo
- bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , erzeugt von : htpasswd -nb bar demo
# Aktivieren Sie die echte IP für CloudFlare-Anfragen
nginx_set_real_ip_from_cloudflare: True
# Nginx Amplify aktivieren
nginx_amplify: true
nginx_amplify_api_key: "hier_kommt_dein_api_schlüssel_hin"
nginx_amplify_update_agent: true
# Definieren Sie Module, die in der Konfiguration aktiviert werden sollen
#
# Nginx, der über EPEL- und APT-Repos installiert wurde, installiert auch einige Module automatisch.
# Für die Verwendung des offiziellen Nginx-Repos müssen Sie Modulpakete manuell installieren.
#
# Wenn Sie mit EPEL und APT-Repos arbeiten, geben Sie diesen Abschnitt als Liste von Konfigurationsdatei
# Namen an, ohne die .conf-Dateierweiterung.
# Wenn Sie das offizielle Nginx-Repo verwenden, geben Sie diesen Abschnitt als Liste von Moduldaten
# Namen an, ohne die .so-Dateierweiterung.
#
# Verfügbare Modulkonfigurationsdateien in EPEL- und APT-Repos:
# - mod-http-geoip
# - mod-http-image-filter
# - mod-http-perl
# - mod-http-xslt-filter
# - mod-mail
# - mod-stream
#
# Verfügbare Moduldateinamen im offiziellen NGINX-Repo:
# - ngx_http_geoip_module
# - ngx_http_image_filter_module
# - ngx_http_perl_module
# - ngx_http_xslt_filter_module
# - ngx_http_js_module
#
# Auch benutzerdefinierte kompilierte Module sind in Ordnung, wenn die .so-Datei im selben Verzeichnis vorhanden ist wie ein paketiertes Modul:
# - ngx_http_modsecurity_module
#
nginx_module_configs:
- mod-http-geoip
Beispiele
1) Installiere nginx mit gewünschten HTTP-Direktiven, aber ohne konfigurierte Seiten und ohne zusätzliche Konfiguration:
- hosts: all
roles:
- {role: nginx,
nginx_http_params: ["sendfile on", "access_log /var/log/nginx/access.log"]
}
2) Installiere nginx mit anderen HTTP-Direktiven als im vorherigen Beispiel, aber ohne
konfigurierte Seiten und ohne zusätzliche Konfiguration.
- hosts: all
roles:
- {role: nginx,
nginx_http_params: ["tcp_nodelay on", "error_log /var/log/nginx/error.log"]}
Hinweis: Bitte stellen Sie sicher, dass die übergebenen HTTP-Direktiven gültig sind, da diese Rolle nicht die Gültigkeit der Direktiven überprüft. Siehe die nginx-Dokumentation für Details.
3) Installiere nginx und füge eine Seite zur Konfiguration hinzu.
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile "on"
- access_log "/var/log/nginx/access.log"
nginx_sites:
bar:
- listen 8080
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
4) Installiere nginx und füge zusätzliche Variablen zur Standardkonfiguration hinzu
- hosts: all
vars:
- my_extra_params:
- client_max_body_size 200M
# Behalte die Standardwerte und füge den zusätzlichen `client_max_body_size` Parameter hinzu
roles:
- role: sorrowless.nginx
nginx_http_params: "{{ nginx_http_default_params + my_extra_params }}"
Hinweis: Jede hinzugefügte Seite wird durch eine Liste von Hashes dargestellt, und die erzeugten Konfigurationen werden in /etc/nginx/site-available/ erstellt und von /etc/nginx/site-enable/ auf /etc/nginx/site-available/ verlinkt.
Der Dateiname für die spezifische Seitenkonfiguration wird im Hash mit dem Schlüssel "file_name" angegeben, alle gültigen Serverdirektiven können dem Hash hinzugefügt werden. Zusätzliche Konfigurationen werden in /etc/nginx/conf.d/ erstellt.
5) Installiere Nginx, füge 2 Seiten (andere Methode) hinzu und füge eine zusätzliche Konfiguration hinzu
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
6) Installiere Nginx, füge 2 Seiten hinzu, füge eine zusätzliche Konfiguration und einen Upstream-Konfigurationsblock hinzu
---
- hosts: all
roles:
- role: nginx
nginx_error_log_level: info
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- if ( $host = example.com ) { rewrite ^(.*)$ http://www.example.com$1 permanent; }
- location / {
try_files $uri $uri/ /index.html;
auth_basic "Eingeschränkt";
auth_basic_user_file auth_basic/demo;
}
- location /images/ { try_files $uri $uri/ /index.html; }
nginx_configs:
proxy:
- proxy_set_header X-Real-IP $remote_addr
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
upstream:
# Resultiert in:
# upstream foo_backend {
# server 127.0.0.1:8080 weight=10;
# }
- upstream foo_backend { server 127.0.0.1:8080 weight=10; }
nginx_auth_basic_files:
demo:
- foo:$apr1$mEJqnFmy$zioG2q1iDWvRxbHuNepIh0 # foo:demo , erzeugt von : htpasswd -nb foo demo
- bar:$apr1$H2GihkSo$PwBeV8cVWFFQlnAJtvVCQ. # bar:demo , erzeugt von : htpasswd -nb bar demo
7) Installiere Nginx, füge eine Seite hinzu und verwende spezielle YAML-Syntax, um die Locations für Klarheit mehrzeilig zu gestalten
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_sites:
foo:
- listen 443 ssl
- server_name foo.example.com
- set $myhost foo.example.com
- |
location / {
proxy_set_header Host foo.example.com;
}
- |
location ~ /v2/users/.+?/organizations {
if ($request_method = PUT) {
set $myhost bar.example.com;
}
if ($request_method = DELETE) {
set $myhost bar.example.com;
}
proxy_set_header Host $myhost;
}
8) Beispiel, um diese Rolle zusammen mit meiner ssl-certs Rolle zu verwenden, um ein SSL-Zertifikat zu erzeugen oder zu kopieren (https://galaxy.ansible.com/sorrowless/ssl-certs)
- hosts: all
roles:
- jdauphant.ssl-certs
- role: sorrowless.nginx
nginx_configs:
ssl:
- ssl_certificate_key {{ssl_certs_privkey_path}}
- ssl_certificate {{ssl_certs_cert_path}}
nginx_sites:
default:
- listen 443 ssl
- server_name _
- root "/usr/share/nginx/html"
- index index.html
9) Seitenkonfiguration mit einer benutzerdefinierten Vorlage.
Anstatt eine Seitenkonfigurationsdatei mithilfe einer Liste von Attributen zu definieren,
können Sie einen Hash/Wörterbuch verwenden, der den Dateinamen einer alternativen Vorlage enthält.
Zusätzliche Werte sind innerhalb der Vorlage über die Variable item.value
zugänglich.
- hosts: all
roles:
- role: nginx
nginx_sites:
custom_bar:
template: custom_bar.conf.j2
server_name: custom_bar.example.com
Benutzerdefinierte Vorlage: custom_bar.conf.j2:
# {{ ansible_managed }}
upstream backend {
server 10.0.0.101;
}
server {
server_name {{ item.value.server_name }};
location / {
proxy_pass http://backend;
}
}
Die Verwendung einer benutzerdefinierten Vorlage ermöglicht unbegrenzte Flexibilität bei der Konfiguration der Seitenkonfigurationsdatei. Dieses Beispiel demonstriert die gängige Praxis, einen Site-Serverblock in derselben Datei wie seinen ergänzenden Upstream-Block zu konfigurieren. Wenn Sie diese Option verwenden:
- Der Hash muss einen
template:
Wert enthalten, sonst schlägt die Konfiguration fehl. - Diese Rolle kann die Gültigkeit Ihrer benutzerdefinierten Vorlage nicht überprüfen. Wenn Sie diese Methode verwenden, stehen Ihnen die vom Format dieser Rolle bereitgestellten Formatierungsoptionen nicht zur Verfügung, und es liegt an Ihnen, eine Vorlage mit gültigem Inhalt und Formatierung für NGINX zur Verfügung zu stellen.
10) Installiere Nginx, füge 2 Seiten hinzu, verwende Snippets zur Konfiguration von Zugriffskontrollen
---
- hosts: all
roles:
- role: nginx
nginx_http_params:
- sendfile on
- access_log /var/log/nginx/access.log
nginx_snippets:
accesslist_devel:
- allow 192.168.0.0/24
- deny all
nginx_sites:
foo:
- listen 8080
- server_name localhost
- root /tmp/site1
- include snippets/accesslist_devel.conf
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
bar:
- listen 9090
- server_name ansible
- root /tmp/site2
- location / { try_files $uri $uri/ /index.html; }
- location /images/ { try_files $uri $uri/ /index.html; }
Abhängigkeiten
Keine
Lizenz
BSD
Autorinformation
- Original : Benno Joy
- Modifiziert von : DAUPHANT Julien
- Überarbeitet von : Stan Bogatkin
ansible-galaxy install sorrowless.nginx