nekeal.nginx

Ansible Rolle: Nginx

CI

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.

Über das Projekt

Nginx installation for Linux, FreeBSD and OpenBSD.

Installieren
ansible-galaxy install nekeal.nginx
GitHub Repository
Lizenz
mit
Downloads
114
Besitzer