gortc.nginx
Ansible Rolle: Nginx
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.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install gortc.nginx