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