gortc.nginx

Rola Ansible: Nginx

Status budowy

Instaluje Nginx na serwerach RedHat/CentOS, Debian/Ubuntu, Archlinux, FreeBSD lub OpenBSD.

Ta rola instaluje i konfiguruje najnowszą wersję Nginx z repozytoriów yum (na systemach opartych na RedHat), apt (na systemach Debian), pacman (Archlinux), pkgng (na systemach FreeBSD) lub pkg_add (na systemach OpenBSD). Prawdopodobnie będziesz musiał wykonać dodatkowe kroki po zainstalowaniu Nginx, takie jak dodanie własnego pliku [virtualhost].conf w /etc/nginx/conf.d/, w celu opisania lokalizacji i opcji dla Twojej strony internetowej.

Wymagania

Brak.

Zmienne roli

Dostępne zmienne są wymienione poniżej wraz z domyślnymi wartościami (zobacz defaults/main.yml):

nginx_vhosts: []

Lista definicji vhostów (bloki serwerów) dla wirtualnych hostów Nginx. Każdy wpis utworzy oddzielny plik konfiguracyjny nazwany zgodnie z server_name. Jeśli jest pusty, będziesz musiał dostarczyć własną konfigurację wirtualnego hosta. Zobacz skomentowany przykład w defaults/main.yml dla dostępnych opcji serwera. Jeśli masz dużą liczbę dostosowań wymaganych dla definicji serwera, lepiej będzie zarządzać plikiem konfiguracji vhosta samodzielnie, pozostawiając tę zmienną ustawioną na [].

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ący | do zadeklarowania bloku składni dla extra_parameters.

Zwróć uwagę na wcięcia w powyższym bloku. Pierwszy wiersz powinien mieć normalne wcięcie 2 spacje. Wszystkie inne wiersze powinny być wcięte w odniesieniu do tego wiersza. W wygenerowanym pliku cały blok będzie miał wcięcie 4 spacje. Styl ten 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 przekierowuje 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. w przekierowaniu, musisz ręcznie ustawić filename, aby drugi nie nadpisywał pierwszego.

nginx_remove_default_vhost: false

Określa, czy usunąć domyślną konfigurację wirtualnego hosta dostarczoną przez Nginx. Przydatne, jeśli chcesz, aby podstawowy URL / był kierowany do jednego z własnych wirtualnych hostów skonfigurowanych w osobnym pliku .conf.

nginx_upstreams: []

Jeśli konfigurujesz Nginx jako rozkładacz obciążenia, możesz zdefiniować jeden lub więcej zestawów upstream za pomocą tej zmiennej. Oprócz zdefiniowania co najmniej jednego upstream, musisz skonfigurować jeden z bloków serwerów do przesyłania żądań przez zdefiniowany upstream (np. proxy_pass http://myapp1;). Zobacz skomentowany przykład w defaults/main.yml dla więcej informacji.

nginx_user: "nginx"

Użytkownik, pod którym działa Nginx. Domyślnie jest to nginx dla RedHat, www-data dla Debiana oraz www na FreeBSD i 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 dostępnych w Twojej maszynie (jeśli domyślna wartość jest błędna, znajdź tę liczbę za pomocą grep processor /proc/cpuinfo | wc -l). nginx_worker_connections to liczba połączeń na proces. Ustaw tę wartość wyżej, aby obsłużyć więcej jednoczesnych połączeń (pamiętaj, że połączenie będzie używane przez czas trwania timeoutu keepalive dla każdego klienta!). Możesz ustawić nginx_multi_accept na on, jeśli chcesz, aby Nginx natychmiast akceptował wszystkie połączenia.

nginx_error_log: "/var/log/nginx/error.log warn"
nginx_access_log: "/var/log/nginx/access.log main buffer=16k"

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 na blogu 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 (ponad 10s), jeśli masz ruch z dużo zapytań (zwłaszcza strony z AJAX), lub niżej (<10s), jeśli masz stronę, na którą większość użytkowników wchodzi tylko na kilka stron i nie wysyła dalszych żądań.

nginx_server_tokens: "on"

Ustawienia server_tokens w Nginx. 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 największy możliwy rozmiar przesyłanego pliku, ponieważ przesyłanie odbywa się przez Nginx przed dotarciem do backendu, takiego jak php-fpm. Jeśli otrzymasz błąd jak client intended to send too large body, oznacza to, że ta wartość jest ustawiona zbyt nisko.

nginx_server_names_hash_bucket_size: "64"

Jeśli masz wiele nazw serwerów, lub masz bardzo długie nazwy serwerów, możesz napotkać błąd Nginx podczas uruchamiania, wymagający zwiększenia tej wartości.

nginx_proxy_cache_path: ""

Ustawiając jako dyrektywę proxy_cache_path w pliku nginx.conf. Domyślnie nie będzie ona skonfigurowana (jeśli pozostawisz jako pusty ciąg), ale jeśli chcesz używać Nginx jako proxy odwrotnego, możesz ustawić to na wartość tropioną (np. "/var/cache/nginx keys_zone=cache:32m"), aby wykorzystać pamięć podręczną Nginx (dalsza konfiguracja proxy może być zrealizowana w indywidualnych konfiguracjach serwerów).

nginx_extra_http_options: ""

Dodatkowe linie do umieszczenia w najwyższym bloku http w nginx.conf. Wartość powinna być zdefiniowana dosłownie (tak jak wkładałbyś ją bezpośrednio w nginx.conf, przestrzegając składni konfiguracyjnej Nginx - takiej jak ; do zakończenia linii itd.). 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 dalszych szczegółów na temat umiejscowienia.

nginx_extra_conf_options: ""

Dodatkowe linie do umieszczenia na początku nginx.conf. Wartość powinna być zdefiniowana dosłownie (tak jak wkładałbyś ją bezpośrednio w nginx.conf, przestrzegając składni konfiguracyjnej Nginx - takiej jak ; do zakończenia linii itd.). Na przykład:

nginx_extra_conf_options: |
  worker_rlimit_nofile 8192;

Zobacz szablon w templates/nginx.conf.j2 dla dalszych szczegółów na temat 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 Nginx.

nginx_default_release: ""

(Dla Debian/Ubuntu) Pozwala ustawić inne repozytorium do instalacji Nginx. Na przykład, jeśli używasz wersji Debiana wheezy i chcesz uzyskać nowszą wersję Nginx, możesz zainstalować repozytorium wheezy-backports i ustawić wartość tutaj, a Ansible użyje jej jako opcji -t podczas instalacji Nginx.

nginx_ppa_use: false
nginx_ppa_version: stable

(Dla Ubuntu) Pozwala korzystać z oficjalnego PPA Nginx zamiast systemowego pakietu. Możesz ustawić wersję na stable lub development.

nginx_yum_repo_enabled: true

(Dla RedHat/CentOS) Ustaw tę opcję na false, aby wyłączyć instalację repozytorium nginx yum. Może to być konieczne, jeśli chcesz domyślne stabilne pakiety OS lub jeśli używasz Satellite.

Nadpisywanie szablonów konfiguracyjnych

Jeśli nie możesz dostosować za pomocą zmiennych, ponieważ opcja nie jest ujawniona, możesz nadpisać szablon używany do generowania plików konfiguracyjnych vhostów lub pliku nginx.conf.

nginx_conf_template: "nginx.conf.j2"
nginx_vhost_template: "vhost.j2"

W razie potrzeby możesz również ustawić szablon na poziomie indywidualnego vhosta.

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 kopić i zmodyfikować dostarczony szablon lub rozszerzyć go korzystając z dziedziczenia szablonów Jinja2 i nadpisać konkretny blok szablonu, który musisz zmienić.

Przykład: Konfiguracja gzip w ustawieniach nginx

Ustaw nginx_conf_template, aby wskazać plik szablonu w swoim katalogu playbooka.

nginx_conf_template: "{{ playbook_dir }}/templates/nginx.conf.j2"

Utwórz szablon podrzędny w ścieżce, którą skonfigurowałeś powyżej, rozszerzając plik szablonu geerlingguy.nginx w odniesieniu 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 gortc.nginx
Licencja
mit
Pobrania
101
Właściciel
Archived, please use @pion (was WebRTC stack in go)