geerlingguy.nginx

Rola Ansible: Nginx

CI

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.

O projekcie

Nginx installation for Linux, FreeBSD and OpenBSD.

Zainstaluj
ansible-galaxy install geerlingguy.nginx
Licencja
mit
Pobrania
12.8M
Właściciel
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns