geerlingguy.nginx
Rola Ansible: Nginx
Uwaga: Proszę rozważyć użycie oficjalnej roli Ansible NGINX od NGINX, Inc.
Instalacja Nginx na serwerach RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD lub OpenBSD.
Ta rola instaluje i konfiguruje najnowszą wersję Nginx z repozytoriów yum (w systemach opartych na RedHat), apt (w systemach opartych na Debianie), pacman (Archlinux), pkgng (na systemach FreeBSD) lub pkg_add (na systemach OpenBSD). Prawdopodobnie po zainstalowaniu Nginx będziesz musiał wykonać dodatkowe kroki konfiguracyjne, takie jak dodanie własnego pliku [virtualhost].conf do /etc/nginx/conf.d/
, opisującego lokalizację i opcje dla twojej strony internetowej.
Wymagania
Brak.
Zmienne roli
Dostępne zmienne są wymienione poniżej, wraz z wartościami domyślnymi (zobacz defaults/main.yml
):
nginx_listen_ipv6: true
Określa, czy nasłuchiwać na IPv6 (dotyczy wszystkich vhostów zarządzanych przez tę rolę).
nginx_vhosts: []
Lista definicji vhostów (bloków serwerów) dla wirtualnych hostów Nginx. Każdy element utworzy osobny plik konfiguracyjny nazwany według server_name
. Jeśli lista jest pusta, musisz dostarczyć własną konfigurację wirtualnego hosta. Zobacz przykładowe komentarze w defaults/main.yml
dla dostępnych opcji serwera. Jeśli masz dużą liczbę wymaganych dostosowań, lepiej będzie zarządzać plikiem konfiguracyjnym wirtualnego hosta samodzielnie, pozostawiając tę zmienną jako []
.
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;
Przykład w pełni wypełnionego wpisu nginx_vhosts, używającego |
do zgłoszenia bloku składni dla extra_parameters
.
Zwróć uwagę na wcięcia w powyższym bloku. Pierwsza linia powinna mieć normalne wcięcie o 2 spacje. Wszystkie inne linie powinny mieć normalne wcięcia w stosunku do tej linii. W wygenerowanym pliku cały blok będzie wcięty o 4 spacje. Taki styl zapewni poprawne wcięcie pliku konfiguracyjnego.
- listen: "80"
server_name: "example.com www.example.com"
return: "301 https://example.com$request_uri"
filename: "example.com.80.conf"
Przykład drugiego vhosta, który przekieruje do powyższego.
Uwaga: filename
domyślnie ustawia się na pierwszą domenę w server_name
; jeśli masz dwa vhosty z tą samą domeną, np. przekierowanie, musisz ręcznie ustawić filename
, aby drugi nie nadpisywał pierwszego.
nginx_remove_default_vhost: false
Określa, czy usunąć konfiguracyjny 'domyślny' wirtualny host dostarczony przez Nginx. Przydatne, jeśli chcesz, aby podstawowy URL /
był skierowany do jednego z własnych wirtualnych hostów skonfigurowanych w oddzielnym pliku .conf.
nginx_upstreams: []
Jeśli konfigurujesz Nginx jako load balancer, możesz zdefiniować jeden lub więcej zestawów upstream przy użyciu tej zmiennej. Oprócz zdefiniowania co najmniej jednego upstream, musisz skonfigurować jeden z bloków serwerowych, aby proxy'ować żądania przez zdefiniowany upstream (np. proxy_pass http://myapp1;
). Zobacz przykładowe komentarze w defaults/main.yml
dla więcej informacji.
nginx_user: "nginx"
Użytkownik, pod którym będzie działać Nginx. Domyślnie nginx
dla RedHat, www-data
dla Debiana i www
w FreeBSD oraz OpenBSD.
nginx_worker_processes: "{{ ansible_processor_vcpus|default(ansible_processor_count) }}"
nginx_worker_connections: "1024"
nginx_multi_accept: "off"
nginx_worker_processes
powinno być ustawione na liczbę rdzeni na twojej maszynie (jeżeli domyślne jest niepoprawne, znajdź tę liczbę za pomocą grep processor /proc/cpuinfo | wc -l
). nginx_worker_connections
to liczba połączeń na proces. Zwiększ to, żeby obsługiwać więcej równoczesnych połączeń (pamiętaj, że połączenie będzie używane przez cały czas trwania timeoutu keepalive dla każdego klienta!). Możesz ustawić nginx_multi_accept
na on
, jeśli chcesz, żeby Nginx akceptował wszystkie połączenia natychmiastowo.
nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k flush=2m"
Konfiguracja domyślnych logów błędów i dostępu. Ustaw na off
, aby całkowicie wyłączyć log.
nginx_sendfile: "on"
nginx_tcp_nopush: "on"
nginx_tcp_nodelay: "on"
Opcje połączenia TCP. Zobacz ten wpis blogowy dla więcej informacji na temat tych dyrektyw.
nginx_keepalive_timeout: "65"
nginx_keepalive_requests: "100"
Ustawienia keepalive w Nginx. Czas oczekiwania powinien być ustawiony wyżej (powyżej 10 s) jeśli masz więcej ruchu typu polling (szczególnie strony oparte na AJAX), lub niżej (<10 s), jeśli masz stronę, gdzie większość użytkowników odwiedza kilka stron i nie wysyła kolejnych żądań.
nginx_server_tokens: "on"
Ustawienia serwera Nginx dotyczące tokenów. Kontroluje, czy nginx odpowiada swoją wersją w nagłówkach HTTP. Ustaw na "off"
, aby wyłączyć.
nginx_client_max_body_size: "64m"
Ta wartość określa maksymalny rozmiar pliku do przesłania, ponieważ przesyłki przechodzą przez Nginx przed dotarciem do backendu, jak php-fpm
. Jeśli pojawia się błąd, że client intended to send too large body
, oznacza to, że ta wartość jest ustawiona za nisko.
nginx_server_names_hash_bucket_size: "64"
Jeśli masz wiele nazw serwerów lub bardzo długie nazwy serwerów, możesz otrzymać błąd Nginx przy uruchamianiu, wymagający zwiększenia tej wartości.
nginx_proxy_cache_path: ""
Ustawia jako dyrektywę proxy_cache_path
w pliku nginx.conf
. Domyślnie nie będzie skonfigurowane (jeśli pozostawione jako pusty ciąg), ale jeśli chcesz użyć Nginx jako odwrotnego proxy, możesz ustawić to na odpowiednią wartość (np. "/var/cache/nginx keys_zone=cache:32m"
) aby używać pamięci podręcznej Nginx (dalszą konfigurację proxy można wykonać w indywidualnych konfiguracjach serwera).
nginx_extra_http_options: ""
Dodatkowe linie do wstawienia w najwyższym bloku http
w nginx.conf
. Wartość powinna być zdefiniowana dosłownie (jakbyś wstawiał ją bezpośrednio do nginx.conf
, przestrzegając składni konfiguracyjnej Nginx, - takich jak ;
dla zakończenia linii itp.), na przykład:
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;
Zobacz szablon w templates/nginx.conf.j2
dla więcej szczegółów dotyczących umiejscowienia.
nginx_extra_conf_options: ""
Dodatkowe linie do wstawienia na początku nginx.conf
. Wartość powinna być zdefiniowana dosłownie (jakbyś wstawiał ją bezpośrednio do nginx.conf
, przestrzegając składni konfiguracyjnej Nginx itd.), na przykład:
nginx_extra_conf_options: |
worker_rlimit_nofile 8192;
Zobacz szablon w templates/nginx.conf.j2
dla więcej informacji o miejscu umiejscowienia.
nginx_log_format: |-
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
Konfiguruje log_format
w Nginx.
nginx_default_release: ""
(Dla Debian/Ubuntu tylko) Pozwala ustawić inne repozytorium do instalacji Nginx. Na przykład, jeśli używasz wydania Debiana wheezy i chcesz uzyskać nowszą wersję Nginx, możesz zainstalować repozytorium wheezy-backports
i ustawić tutaj tę wartość, a Ansible użyje tego jako opcji -t
podczas instalacji Nginx.
nginx_ppa_use: false
nginx_ppa_version: stable
(Dla Ubuntu tylko) Pozwala używać oficjalnego PPA Nginx zamiast pakietu systemowego. Możesz ustawić wersję na stable
lub development
.
nginx_yum_repo_enabled: true
(Dla RedHat/CentOS tylko) Ustaw to na false
, aby wyłączyć instalację repozytorium nginx
yum. Może to być konieczne, jeśli chcesz stabilne pakiety oprogramowania systemu, lub jeśli korzystasz z Satellite.
nginx_zypper_repo_enabled: true
(Dla Suse tylko) Ustaw to na false
, aby wyłączyć instalację repozytorium nginx
z zypper. Może to być konieczne, jeśli chcesz stabilne pakiety oprogramowania systemu, lub jeśli korzystasz z Suse Manager.
nginx_service_state: started
nginx_service_enabled: yes
Domyślnie ta rola zapewnia, że Nginx jest uruchomiony i włączony przy uruchamianiu po skonfigurowaniu Nginx. Możesz użyć tych zmiennych, aby zmienić to zachowanie, jeśli instalujesz w kontenerze lub potrzebujesz większej kontroli nad stanem usługi.
Nadpisywanie szablonów konfiguracyjnych
Jeśli nie możesz dostosować się za pomocą zmiennych, ponieważ jakaś opcja nie jest udostępniona, możesz nadpisać szablon używany do generowania plików konfiguracyjnych vhost lub pliku nginx.conf
.
nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"
Jeśli to konieczne, możesz również ustawić szablon na poziomie konkretnego vhost.
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"
Możesz skopiować i zmodyfikować dostarczony szablon lub rozszerzyć go za pomocą dziedziczenia szablonów Jinja2 i nadpisać konkretny blok szablonu, który chcesz zmienić.
Przykład: Konfiguracja gzip w konfiguracji nginx
Ustaw nginx_conf_template
, aby wskazać plik szablonu w katalogu twojego playbooka.
nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"
Utwórz szablon podrzędny w ścieżce, którą skonfigurowałeś powyżej i rozszerz plik szablonu geerlingguy.nginx
, odniesienie do swojego 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 %}
Zależności
Brak.
Przykładowy playbook
- hosts: server
roles:
- { role: geerlingguy.nginx }
Licencja
MIT / BSD
Informacje o autorze
Ta rola została stworzona w 2014 roku przez Jeffa Geerlinga, autora Ansible for DevOps.
Nginx installation for Linux, FreeBSD and OpenBSD.
ansible-galaxy install geerlingguy.nginx