Shir0kamii.ansible_role_nginx
Rola Ansible: Nginx
Uwaga: Rozważ użycie oficjalnej rolki Ansible NGINX od NGINX, Inc.
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 opartych na Debianie), pacman (Archlinux), pkgng (na systemach FreeBSD) lub pkg_add (na systemach OpenBSD). Po zainstalowaniu Nginx prawdopodobnie będziesz musiał wykonać dodatkowe kroki konfiguracyjne, takie jak dodanie własnego pliku [virtualhost].conf w katalogu /etc/nginx/conf.d/
, który opisuje lokalizację i opcje, które powinny być używane 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_vhosts: []
Lista definicji vhostów (bloków serwerowych) dla wirtualnych hostów Nginx. Każdy wpis stworzy osobny plik konfiguracyjny nazwany zgodnie z server_name
. Jeśli pozostawisz tę listę pustą, musisz dostarczyć własną konfigurację wirtualnego hosta. Zobacz przykładowy komentarz 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 wypełnionego wpisu nginx_vhosts, używającego |
do zdefiniowania bloku składni dla extra_parameters
.
Zwróć uwagę na wcięcia w powyższym bloku. Pierwsza linia powinna mieć standardowe wcięcie na 2 spacje. Wszystkie inne linie powinny być wcięte normalnie w stosunku do tej linii. W wygenerowanym pliku cały blok będzie wcięty o 4 spacje. Taki styl zapewni poprawne wcięcia w pliku konfiguracyjnym.
- 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: Wartość filename
domyślnie odnosi się do pierwszej domeny 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
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 równoważnik obciążenia, możesz zdefiniować jeden lub więcej zestawów upstream przy użyciu tej zmiennej. Oprócz zdefiniowania przynajmniej jednego upstream, musisz skonfigurować jeden z bloków serwerów, aby przesyłać żądania przez zdefiniowany upstream (np. proxy_pass http://myapp1;
). Zobacz przykładowy komentarz 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 Debian i 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 na Twoim komputerze (jeśli domyślna wartość jest błędna, znajdź tę liczbę używając grep processor /proc/cpuinfo | wc -l
). nginx_worker_connections
to liczba połączeń na proces. Ustaw to wyżej, aby obsłużyć więcej równoczesnych połączeń (i pamiętaj, że połączenie będzie używane przez cały czas, gdy będzie trwał timeout 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 Nginx. Czas oczekiwania powinien być ustawiony na wyższą wartość (powyżej 10s), jeśli masz więcej ruchu w stylu polling (szczególnie strony z AJAX), lub niższą wartość (<10s), jeśli masz stronę, na której większość użytkowników przegląda kilka stron i nie wysyła dalszych żądań.
nginx_server_tokens: "on"
Ustawienia tokenów serwera 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 maksymalny dozwolony rozmiar pliku do przesłania, ponieważ przesyłane pliki są przekazywane przez Nginx przed dotarciem do backendu, jak php-fpm
. Jeśli otrzymasz błąd typu 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 bardzo długie nazwy, możesz napotkać błąd Nginx podczas uruchamiania, wymagający zwiększenia tej wartości.
nginx_proxy_cache_path: ""
Ustawiane jako dyrektywa 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żywać Nginx jako odwrotnego proxy, możesz ustawić to na ważną wartość (np. "/var/cache/nginx keys_zone=cache:32m"
) w celu skorzystania z pamięci podręcznej Nginx (dalsza konfiguracja proxy może być dokonana w indywidualnych konfiguracjach serwerów).
nginx_extra_http_options: ""
Dodatkowe linie do wstawienia w górnym bloku http
w pliku nginx.conf
. Wartość powinna być zdefiniowana dosłownie (jakbyś ją bezpośrednio wstawiał do nginx.conf
, przestrzegając składni konfiguracyjnej Nginx - takich jak ;
na zakończenie 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 na temat umiejscowienia.
nginx_extra_conf_options: ""
Dodatkowe linie do wstawienia na początku nginx.conf
. Wartość powinna być zdefiniowana dosłownie (jakbyś ją bezpośrednio wstawiał do nginx.conf
, przestrzegając składni konfiguracyjnej Nginx - takich jak ;
na zakończenie linii itp.), na przykład:
nginx_extra_conf_options: |
worker_rlimit_nofile 8192;
Zobacz szablon w templates/nginx.conf.j2
dla więcej 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 tylko) Pozwala na ustawienie innego 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ć tę wartość tutaj, a Ansible użyje tego jako opcji -t
podczas instalacji Nginx.
nginx_ppa_use: false
nginx_ppa_version: stable
(Dla Ubuntu tylko) Pozwala na użycie 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 yum dla nginx
. Może być to konieczne, jeśli chcesz korzystać z domyślnych stabilnych pakietów systemu operacyjnego lub używasz Satellite.
Nadpisywanie szablonów konfiguracyjnych
Jeśli nie możesz dostosować za pomocą zmiennych, ponieważ opcja nie jest udostępniona, możesz nadpisać szablon używany do generowania plików konfiguracyjnych wirtualnych hostó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 dla każdego vhosta osobno.
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ć ten blok szablonu, który musisz zmienić.
Przykład: Konfiguracja gzip w konfiguracji nginx
Ustaw nginx_conf_template
na wskazanie pliku szablonu w swoim katalogu playbook.
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 szablon geerlingguy.nginx
w stosunku 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: serwer
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 Shir0kamii.ansible_role_nginx