nekeal.nginx
Ansible Rolle: Nginx
Hinweis: Bitte ziehen Sie in Betracht, die offizielle NGINX Ansible Rolle von NGINX, Inc. zu verwenden.
Installiert Nginx auf RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD oder OpenBSD Servern.
Diese Rolle installiert und konfiguriert die neueste Version von Nginx aus dem Nginx Yum-Repository (auf RedHat-basierten Systemen), apt (auf Debian-basierten Systemen), pacman (Archlinux), pkgng (auf FreeBSD-Systemen) oder pkg_add (auf OpenBSD-Systemen). Sie müssen wahrscheinlich zusätzliche Einrichtungsschritte vornehmen, nachdem diese Rolle Nginx installiert hat, wie z.B. das Hinzufügen Ihrer eigenen [virtualhost].conf-Datei in /etc/nginx/conf.d/
, die den Standort und die Optionen für Ihre spezielle Website beschreibt.
Voraussetzungen
Keine.
Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
nginx_listen_ipv6: true
Ob auf IPv6 zugehört werden soll (gilt für alle Vhosts, die von dieser Rolle verwaltet werden).
nginx_selfsigned_certificate_directory: /etc/nginx/ssl
nginx_selfsigned_certificate_privkey: "{{ nginx_selfsigned_certificate_directory }}/privkey.pem"
nginx_selfsigned_certificate_fullchain: "{{ nginx_selfsigned_certificate_directory }}/fullchain.pem"
nginx_selfsigned_certificate_csr: "{{ nginx_selfsigned_certificate_directory }}/cert.csr"
Variablen, die definieren, wo das selbsterstellte Zertifikat erstellt werden soll. Es wird in catchall-vhost
verwendet und als Ersatz für fehlende Zertifikate in der nginx-vhost
-Konfiguration.
nginx_copy_missing_certs: yes
Definiert, ob die Rolle selbstsignierte Zertifikate für Vhosts kopieren soll.
nginx_vhosts: []
Eine Liste von Vhost-Definitionen (Server-Block) für Nginx virtuelle Hosts. Jeder Eintrag erstellt eine separate Konfigurationsdatei, benannt nach name
. Wenn diese Liste leer bleibt, müssen Sie Ihre eigene virtuelle Hostkonfiguration bereitstellen. Siehe das kommentierte Beispiel in defaults/main.yml
für verfügbare Serveroptionen. Wenn Sie eine große Anzahl von Anpassungen für Ihre Serverdefinition(en) benötigen, ist es wahrscheinlich besser, die Vhost-Konfigurationsdatei selbst zu verwalten und diese Variable auf []
zu belassen. Da ich hauptsächlich in Django programmiere, habe ich eine django-vhost.j2
-Vorlage erstellt, die die Möglichkeit bietet, sie mit einem Snippet-Mechanismus zu erweitern.
nginx_vhosts:
- name: localhost-django
server_names:
- "localhost"
upstreams:
- name: local
server: localhost:8000
template: django-vhost.j2
extra_static_roots:
- location: "/www/"
root: /var/
snippets:
- location: "~* /static/(.*\\.)(js|css)"
expiries: 365d
alias: "/var/www/static/$1$2"
template: cache.j2
- location: "/"
upstream: "local"
template: "proxy.j2"
enable_https: true
static_root: /var/www/static/
media_root: /var/www/media/
certificate: /etc/letsencrypt/live/localhost/fullchain.pem
private_key: /etc/letsencrypt/live/localhost/privkey.pem
In diesem Beispiel wird, falls das Zertifikat im obigen Pfad fehlt, es aus dem nginx_selfsigned_certificate_directory
kopiert. Dies sorgt dafür, dass Nginx ordnungsgemäß startet, aber Sie sollten wahrscheinlich selbst ein gültiges Zertifikat bereitstellen.
nginx_remove_default_vhost: false
Ob die Standard-Virtuelle Hostkonfiguration, die von Nginx bereitgestellt wird, entfernt werden soll. Nützlich, wenn Sie die Basis-URL /
auf einen Ihrer eigenen virtuellen Hosts umleiten möchten, die in einer separaten .conf-Datei konfiguriert sind.
nginx_upstreams: []
Wenn Sie Nginx als Lastenausgleich konfigurieren, können Sie ein oder mehrere Upstream-Sets mit dieser Variablen definieren. Zusätzlich zur Definition von mindestens einem Upstream müssen Sie einen Ihrer Serverblöcke so konfigurieren, dass er Anfragen über den definierten Upstream weiterleitet (z.B. proxy_pass http://myapp1;
). Siehe das kommentierte Beispiel in defaults/main.yml
für weitere Informationen.
nginx_user: "nginx"
Der Benutzer, unter dem Nginx läuft. Standardmäßig nginx
für RedHat, www-data
für Debian und www
auf FreeBSD und OpenBSD.
nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
nginx_worker_connections: "1024"
nginx_multi_accept: "off"
nginx_worker_processes
sollte auf die Anzahl der Kerne gesetzt werden, die auf Ihrem Rechner vorhanden sind (wenn der Standardwert inkorrekt ist, finden Sie diese Zahl mit grep processor /proc/cpuinfo | wc -l
). nginx_worker_connections
ist die Anzahl der Verbindungen pro Prozess. Setzen Sie diesen Wert höher, um mehr gleichzeitige Verbindungen zu verarbeiten (und denken Sie daran, dass eine Verbindung so lange genutzt wird, wie die Keepalive-Timeout-Dauer für jeden Client!). Sie können nginx_multi_accept
auf on
setzen, wenn Sie möchten, dass Nginx alle Verbindungen sofort akzeptiert.
nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"
Konfiguration der Standard-Fehler- und Zugriffsprotokolle. Setzen Sie den Wert auf off
, um ein Protokoll vollständig zu deaktivieren.
nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"
TCP-Verbindungsoptionen. Weitere Informationen zu diesen Direktiven finden Sie in diesem Blogbeitrag.
nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"
Nginx Keepalive-Einstellungen. Der Timeout sollte höher (10s+) eingestellt werden, wenn Sie mehr Abfrage-basierte Verkehr haben (insbesondere AJAX-gestützte Seiten), oder niedriger (<10s), wenn Sie eine Seite haben, auf der die meisten Benutzer nur einige Seiten besuchen und keine weiteren Anfragen stellen.
nginx_server_tokens: "on"
Nginx server_tokens-Einstellungen. Steuert, ob Nginx mit seiner Version in HTTP-Headern antwortet. Setzen Sie diesen Wert auf "off"
um dies zu deaktivieren.
nginx_client_max_body_size: "64m"
Dieser Wert bestimmt die größte mögliche Datei, die hochgeladen werden kann, da Uploads über Nginx geleitet werden, bevor sie eine Backend-Anwendung wie php-fpm
erreichen. Wenn Sie einen Fehler wie client intended to send too large body
erhalten, bedeutet dies, dass dieser Wert zu niedrig eingestellt ist.
nginx_server_names_hash_bucket_size: "64"
Wenn Sie viele Servernamen haben oder sehr lange Servernamen, könnten Sie beim Start von Nginx einen Fehler erhalten, der verlangt, dass dieser Wert erhöht wird.
nginx_proxy_cache_path: ""
Festgelegt als proxy_cache_path
-Direktive in der nginx.conf
-Datei. Standardmäßig wird dies nicht konfiguriert (wenn als leerer String belassen), aber wenn Sie Nginx als Reverse-Proxy verwenden möchten, können Sie dies auf einen gültigen Wert setzen (z.B. "/var/cache/nginx keys_zone=cache:32m"
), um den Cache von Nginx zu verwenden (weitere Proxy-Konfigurationen können in einzelnen Serverkonfigurationen vorgenommen werden).
nginx_extra_http_options: ""
Zusätzliche Zeilen, die in den obersten http
-Block in der nginx.conf
eingefügt werden. Der Wert sollte wörtlich definiert werden (so wie Sie ihn direkt in die nginx.conf
einfügen würden, unter Berücksichtigung der Nginx-Konfigurationssyntax - wie z.B. ;
für die Zeilenbeendigung usw.), zum Beispiel:
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;
Siehe die Vorlage in templates/nginx.conf.j2
für weitere Details zur Platzierung.
nginx_extra_conf_options: ""
Zusätzliche Zeilen, die an den Anfang von nginx.conf
eingefügt werden. Der Wert sollte wörtlich definiert werden (so wie Sie ihn direkt in die nginx.conf
einfügen würden, unter Berücksichtigung der Nginx-Konfigurationssyntax - wie z.B. ;
für die Zeilenbeendigung usw.), zum Beispiel:
nginx_extra_conf_options: |
worker_rlimit_nofile 8192;
Siehe die Vorlage in templates/nginx.conf.j2
für weitere Details zur Platzierung.
nginx_log_format: |-
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
Konfiguriert Nginx's log_format
. Optionen.
nginx_default_release: ""
(Nur für Debian/Ubuntu) Ermöglicht es Ihnen, ein anderes Repository für die Installation von Nginx festzulegen. Wenn Sie beispielsweise Debians Wheezy-Version ausführen und eine neuere Version von Nginx erhalten möchten, können Sie das wheezy-backports
-Repository installieren und diesen Wert hier festlegen. Ansible wird dies dann als -t
-Option bei der Installation von Nginx verwenden.
nginx_ppa_use: false
nginx_ppa_version: stable
(Nur für Ubuntu) Ermöglicht es Ihnen, das offizielle Nginx PPA anstelle des Systempakets zu verwenden. Sie können die Version auf stable
oder development
setzen.
nginx_yum_repo_enabled: true
(Nur für RedHat/CentOS) Setzen Sie dies auf false
, um die Installation des nginx
Yum-Repositories zu deaktivieren. Dies kann notwendig sein, wenn Sie die Standard-OS-stabilen Pakete verwenden möchten oder wenn Sie Satellite verwenden.
nginx_service_state: started
nginx_service_enabled: yes
Standardmäßig sorgt diese Rolle dafür, dass Nginx läuft und beim Booten aktiviert ist, nachdem Nginx konfiguriert wurde. Sie können diese Variablen verwenden, um dieses Verhalten zu überschreiben, falls Sie in einem Container installieren oder eine weitere Kontrolle über den Dienststatus benötigen.
Überschreiben von Konfigurationstabellen
Wenn Sie nicht über Variablen anpassen können, weil eine Option nicht exponiert wird, können Sie die Vorlage, die zur Generierung der virtuellen Hostkonfigurationsdateien oder der nginx.conf
-Datei verwendet wird, überschreiben.
nginx_conf_template: "nginx.conf.j2"
nginx_catchall_template: "default-catchall.j2"
nginx_vhost_template: "vhost.j2"
Falls erforderlich, können Sie auch die Vorlage pro Vhost festlegen.
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"
Sie können entweder die bereitgestellte Vorlage kopieren und modifizieren oder sie mit der Jinja2-Vorlagenvererbung erweitern und den spezifischen Vorlagenblock überschreiben, den Sie ändern möchten.
Beispiel: Gzip in der Nginx-Konfiguration konfigurieren
Setzen Sie die nginx_conf_template
, um auf eine Vorlagendatei in Ihrem Playbook-Verzeichnis zu zeigen.
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
Erstellen Sie die Kindvorlage in dem oben konfigurierten Pfad und erweitern Sie die nekeal.nginx
-Vorlagendatei relativ zu Ihrer playbook.yml
.
{% extends 'roles/nekeal.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 %}
Abhängigkeiten
Keine.
Beispiel-Playbook
- hosts: server
roles:
- { role: nekeal.nginx }
Lizenz
MIT / BSD
Autoreninformation
Diese Rolle wurde 2014 von Jeff Geerling erstellt, Autor von Ansible for DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install nekeal.nginx