Shir0kamii.ansible_role_nginx
Ansible-Rolle: Nginx
Hinweis: Bitte ziehen Sie die offizielle NGINX Ansible Rolle von NGINX, Inc. in Betracht.
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 möglicherweise zusätzliche Konfigurationen vornehmen, nachdem diese Rolle Nginx installiert hat, z. B. Ihre eigene [virtualhost].conf-Datei im Verzeichnis /etc/nginx/conf.d/
erstellen, die den Standort und die Optionen für Ihre spezielle Website beschreibt.
Anforderungen
Keine.
Rollenvariablen
Verfügbare Variablen sind unten aufgelistet, zusammen mit den 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 wird. Wenn diese leer gelassen wird, müssen Sie Ihre eigene virtuelle Host-Konfiguration bereitstellen. Siehe das kommentierte Beispiel in defaults/main.yml
für verfügbare Serveroptionen. Wenn Sie viele Anpassungen für Ihre Serverdefinition(en) benötigen, ist es wahrscheinlich besser, die vhost-Konfigurationsdatei selbst zu verwalten und diese Variable auf []
zu setzen.
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 nginx_vhosts-Eintrag, der ein |
verwendet, um einen Block von Syntax für die extra_parameters
zu deklarieren.
Bitte beachten Sie die Einrückung im obigen Block. Die erste Zeile sollte mit einem normalen 2-Leerzeichen-Indent versehen sein. Alle anderen Zeilen sollten im Vergleich zu dieser Zeile normal eingerückt sein. In der generierten Datei wird der gesamte Block 4-Leerzeichen-indentiert sein. 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 auf den oben gezeigten umleitet.
Hinweis: Der filename
wird standardmäßig auf die erste Domain in server_name
gesetzt. Wenn Sie zwei vhosts mit derselben Domain haben, z.B. eine Weiterleitung, müssen Sie den filename
manuell setzen, damit der zweite den ersten nicht überschreibt.
nginx_remove_default_vhost: false
Ob die 'default'-Virtualhost-Konfiguration, die von Nginx bereitgestellt wird, entfernt werden soll. Nützlich, wenn Sie die Basis-/
-URL auf einen Ihrer eigenen virtuellen Hosts, die in einer separaten .conf-Datei konfiguriert sind, umleiten möchten.
nginx_upstreams: []
Wenn Sie Nginx als Lastenausgleich konfigurieren, können Sie mit dieser Variable ein oder mehrere Upstream-Sets definieren. Neben der Definition von mindestens einem Upstream müssten Sie eines Ihrer Server-Blöcke so konfigurieren, dass Anforderungen über den definierten Upstream weitergeleitet werden (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 auf 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. Erhöhen Sie diesen Wert, um mehr gleichzeitige Verbindungen zu verwalten (und denken Sie daran, dass eine Verbindung so lange verwendet 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 sofort alle Verbindungen akzeptiert.
nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"
Konfiguration der Standardfehler- 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. Siehe diesen Blogbeitrag für weitere Informationen zu diesen Direktiven.
nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"
Einstellungen für Nginx-Keepalive. Der Timeout sollte höher (über 10s) eingestellt werden, wenn Sie mehr Umfrage-Traffic haben (insbesondere AJAX-Websites), oder niedriger (<10s), wenn Sie eine Website haben, auf der die meisten Benutzer nur einige Seiten besuchen und keine weiteren Anforderungen senden.
nginx_server_tokens: "on"
Einstellungen für Nginx-Server-Token. Bestimmt, ob Nginx seine Version in den HTTP-Headern beantwortet. Auf "off"
setzen, 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 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 verwenden, könnten Sie beim Start von Nginx einen Fehler erhalten, der erfordert, dass dieser Wert erhöht wird.
nginx_proxy_cache_path: ""
Setzen Sie dies als die proxy_cache_path
-Direktive in der nginx.conf
. 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 den einzelnen Serverkonfigurationen vorgenommen werden).
nginx_extra_http_options: ""
Zusätzliche Zeilen, die in den obersten http
-Block in nginx.conf
eingefügt werden. Der Wert sollte wörtlich definiert werden (wie Sie es direkt in die nginx.conf
einfügen würden, unter Einhaltung der Nginx-Konfigurationssyntax - wie ;
zur Zeilenabschlusserkennung 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 Einzelheiten zur Platzierung.
nginx_extra_conf_options: ""
Zusätzliche Zeilen, die oben in der nginx.conf
eingefügt werden. Der Wert sollte wörtlich definiert werden, analog zu dem, wie Sie es direkt in die nginx.conf
einfügen würden, unter Einhaltung der Nginx-Konfigurationssyntax - wie ;
zur Zeilenabschlusserkennung usw., zum Beispiel:
nginx_extra_conf_options: |
worker_rlimit_nofile 8192;
Siehe die Vorlage in templates/nginx.conf.j2
für weitere Einzelheiten 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) Erlaubt es Ihnen, ein anderes Repository für die Installation von Nginx festzulegen. Wenn Sie beispielsweise die Debian-Version Wheezy verwenden und eine neuere Version von Nginx installieren möchten, können Sie das wheezy-backports
-Repository installieren und diesen Wert hier festlegen. Ansible wird dies als die -t
-Option beim Installieren von Nginx verwenden.
nginx_ppa_use: false
nginx_ppa_version: stable
(Nur für Ubuntu) Ermöglicht die Verwendung der 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 kann erforderlich sein, wenn Sie die stabilen 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, die zur Generierung der Virtualhost-Konfigurationsdateien oder der nginx.conf
verwendet wird, überschreiben.
nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"
Wenn nötig, können Sie die Vorlage auch für jeden vhost individuell 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 ändern oder sie mit 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
auf eine Vorlagendatei in Ihrem Playbook-Verzeichnis.
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
Erstellen Sie die untergeordnete Vorlage im oben konfigurierten Pfad und erweitern Sie die Vorlage von geerlingguy.nginx
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.
Beispiel-Playbook
- hosts: server
roles:
- { role: geerlingguy.nginx }
Lizenz
MIT / BSD
Autor-Information
Diese Rolle wurde 2014 von Jeff Geerling erstellt, dem Autor von Ansible for DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install Shir0kamii.ansible_role_nginx