gortc.nginx

Ansible Rolle: Nginx

Build Status

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). Wahrscheinlich müssen Sie nach der Installation von Nginx durch diese Rolle weitere Einrichtungsschritte durchführen, wie beispielsweise das Hinzufügen Ihrer eigenen [virtualhost].conf-Datei in /etc/nginx/conf.d/, die den Standort und die Optionen für Ihre spezifische Website beschreibt.

Anforderungen

Keine.

Rollenvariablen

Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml):

nginx_vhosts: []

Eine Liste von vhost-Definitionen (Server-Blöcke) für Nginx-virtuelle Hosts. Jeder Eintrag erstellt eine separate Konfigurationsdatei, die nach server_name benannt ist. 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 [] gesetzt zu lassen.

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;

Ein Beispiel für einen vollständig ausgefüllten Eintrag in nginx_vhosts, der ein | verwendet, um einen Block von Syntax für die extra_parameters zu erklären.

Bitte beachten Sie die Einrückung im obigen Block. Die erste Zeile sollte normal mit 2 Leerzeichen eingerückt sein. Alle anderen Zeilen sollten im Verhältnis zu dieser Zeile normal eingerückt sein. In der generierten Datei wird der gesamte Block 4 Leerzeichen eingerückt. Dieser Stil sorgt dafür, dass die Konfigurationsdatei korrekt eingerückt ist.

  - listen: "80"
    server_name: "example.com www.example.com"
    return: "301 https://example.com$request_uri"
    filename: "example.com.80.conf"

Ein Beispiel für einen sekundären vhost, der zu dem oben gezeigten umleitet.

Hinweis: Der filename wird standardmäßig auf die erste Domain im server_name gesetzt. Wenn Sie zwei vhosts mit derselben Domain haben, z. B. eine Umleitung, müssen Sie den filename manuell festlegen, damit der zweite nicht den ersten überschreibt.

nginx_remove_default_vhost: false

Ob das 'default' 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 Variable definieren. Zusätzlich zur Definition von mindestens einem Upstream müssen Sie einen Ihrer Serverblöcke konfigurieren, um Anfragen über den definierten Upstream zu proxyen (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 ausgeführt wird. Standardmäßig ist dies 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 in Ihrer Maschine eingestellt werden (wenn der Standardwert falsch 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 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 (über 10s) eingestellt werden, wenn Sie mehr Polling-artigen Verkehr haben (insbesondere AJAX-angetriebene Websites), oder niedriger (<10s), wenn Sie eine Website haben, auf der die meisten Benutzer einige Seiten besuchen und keine weiteren Anfragen senden.

nginx_server_tokens: "on"

Nginx server_tokens Einstellungen. Kontrolliert, ob Nginx mit seiner Version in HTTP-Headern antwortet. Setzen Sie auf "off", um dies zu deaktivieren.

nginx_client_max_body_size: "64m"

Dieser Wert bestimmt die größte Datei, die hochgeladen werden kann, da Uploads über Nginx geleitet werden, bevor sie ein Backend 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 haben, könnte es beim Start von Nginx zu einem Fehler kommen, der erfordert, dass dieser Wert erhöht wird.

nginx_proxy_cache_path: ""

Setzen Sie dies als Direktive proxy_cache_path 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 Nginx’s Cache zu nutzen (zusätzliche Proxy-Konfigurationen können in einzelnen Serverkonfigurationen vorgenommen werden).

nginx_extra_http_options: ""

Zusätzliche Zeilen, die in den obersten http-Block in nginx.conf eingefügt werden sollen. Der Wert sollte wörtlich definiert werden (wie Sie ihn direkt in die nginx.conf einfügen würden, unter Beachtung der Nginx-Konfigurationssyntax - wie z. B. ; für Zeilenabschlüsse 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 oben in nginx.conf eingefügt werden sollen. Der Wert sollte wörtlich definiert werden (wie Sie ihn direkt in die nginx.conf einfügen würden, unter Beachtung der Nginx-Konfigurationssyntax - wie z. B. ; für Zeilenabschlüsse 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 das log_format von Nginx.

nginx_default_release: ""

(Nur für Debian/Ubuntu) Ermöglicht es Ihnen, ein anderes Repository für die Installation von Nginx festzulegen. Zum Beispiel, wenn Sie die Debian-Wheezy-Version ausführen und eine neuere Version von Nginx möchten, können Sie das Repository wheezy-backports installieren und diesen Wert hier festlegen. Ansible wird diesen Wert als -t-Option während der Installation von Nginx verwenden.

nginx_ppa_use: false
nginx_ppa_version: stable

(Nur für Ubuntu) Ermöglicht Ihnen die Verwendung des offiziellen Nginx PPA anstelle des Systempakets. 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 Repositorys zu deaktivieren. Dies könnte notwendig sein, wenn Sie die Standard-Stabilitäts-Pakete des Betriebssystems verwenden möchten oder wenn Sie Satellite verwenden.

Überschreiben von Konfigurationstemplates

Wenn Sie nicht über Variablen anpassen können, weil eine Option nicht verfügbar ist, können Sie die Vorlage überschreiben, die zum Erzeugen der virtuellen Hostkonfigurationsdateien oder der nginx.conf-Datei verwendet wird.

nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"

Wenn nötig, können Sie die Vorlage auch für jeden vhost einzeln 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 anpassen oder sie mit Jinja2-Template-Vererbung erweitern und den spezifischen Templateblock ü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 verweisen.

nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"

Erstellen Sie die Kindervorlage im oben konfigurierten Pfad und erweitern Sie die geerlingguy.nginx Vorlagendatei relativ zu Ihrer 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 %}

Abhängigkeiten

Keine.

Beispielszenario

- hosts: server
  roles:
    - { role: geerlingguy.nginx }

Lizenz

MIT / BSD

Autor

Diese Rolle wurde 2014 von Jeff Geerling erstellt, dem Autor von Ansible for DevOps.

Über das Projekt

Nginx installation for Linux, FreeBSD and OpenBSD.

Installieren
ansible-galaxy install gortc.nginx
GitHub Repository
Lizenz
mit
Downloads
101
Besitzer
Archived, please use @pion (was WebRTC stack in go)