JoergFiedler.freebsd-jailed-nginx
freebsd-jailed-nginx
Ten zestaw narzędzi udostępnia zablokowany serwer nginx, który nasłuchuje na localhost:{80,443}
na nadchodzące żądania.
Zestaw narzędzi dostarcza również działającą konfigurację SSL, korzystając z funkcji dostarczanej przez Let's Encrypt.
Musisz dostarczyć własny plik dhparam.pem
. Utwórz folder nazwany według nazwy Twojego serwera (example.com
) w folderze files
obok Twojego playbooka.
Certyfikat będzie walidowany/tworzony co tydzień. Aby uruchomić serwer natychmiast, zainstalowany zostanie samopodpisany certyfikat localhost. Możesz ręcznie wygenerować certyfikaty Let's Encrypt po uruchomieniu jails, używając poniższego polecenia:
/usr/local/bin/acme-client-weekly.sh
Może być używany przez inne zestawy narzędzi do obsługi instalacji WordPressa lub Joomli. Aby uzyskać dostęp do katalogu webroot, skonfigurowany jest również serwer SFTP, który jest zabezpieczony uwierzytelnianiem za pomocą klucza publicznego.
Ten zestaw narzędzi może być również użyty do stworzenia proxy SSL, które przekierowuje ruch do specyficznych jails lub zewnętrznych witryn.
Wymagania
Ten zestaw narzędzi jest przeznaczony do użytku z nową instalacją FreeBSD. Możesz użyć Vagrant Box z dostawcami dla VirtualBox oraz EC2.
Zmienne zestawu narzędzi
nginx_letsencrypt_enabled
Ustaw na yes
, aby włączyć automatyczne zarządzanie certyfikatami z Let's Encrypt dla wszystkich serwerów nginx. Jeśli włączone, zainstaluje narzędzie acme-client
i przygotuje jakąś konfigurację dla serwerów. Domyślnie: no
.
nginx_letsencrypt_acme_private_key
Użyj tej zmiennej, aby określić klucz prywatny, który będzie używany przez klienta acme do komunikacji z Let's Encrypt. Domyślnie: '''
.
nginx_letsencrypt_api_host
Nazwa hosta serwera, z którym będziemy się komunikować. Domyślnie: acme-v02.api.letsencrypt.org
.
nginx_tarsnap_enabled
Czy webroot wszystkich serwerów nginx powinien być kopiowany przy użyciu tarsnap. Musi być włączone na hoście (tarsnap_enabled: yes
). Domyślnie: {{ tarsnap_enabled | default("no") }}
.
nginx_syslogd_server
Serwer syslogd, którego nginx powinien używać do zapisywania błędów i dostępu. Domyślnie: {{ syslogd_server | default("localhost") }}
.
nginx_pf_redirect
Ustaw na yes
, jeśli ruch do portów http(s) ma być kierowany do serwera nginx w tej działalności. Domyślnie: no
.
Jeśli włączone, domyślna konfiguracja będzie przekazywać ruch kierowany do portów 80 i 443 z zewnętrznego interfejsu hosta do tego jaila. Konfigurację tę można zmienić, używając zmiennej nginx_pf_rdrs
.
nginx_pf_rdrs
Konfiguruje, jak działa przekierowanie ruchu z hosta do jaila. Domyślna konfiguracja wygląda następująco.
nginx_pf_rdrs:
- ports:
- 'http'
- 'https'
ext_ip: '{{ host_net_ext_ip }}'
ext_if: '{{ host_net_ext_if }}'
To oznacza, że cały ruch trafiający do zewnętrznego interfejsu hosta z zewnętrznym IP dla obu portów https
i http
będzie przekierowywany do portu http
NGINX działającego wewnątrz jails.
nginx_servers
Ta zmienna zawiera tablicę instancji serwerów nginx dla tego jaila. Możesz to wykorzystać do konfigurowania różnych rodzajów jaili nginx, np. proxy kończącego https, obsługującego wiele statycznych witryn internetowych lub witryn PHP. Zobacz sekcję przykładów poniżej.
aliases: ''
basic_auth_enabled: no
force_www: no
https:
enabled: no
letsencrypt_enabled: no
key_file: 'localhost-key.pem'
certbundle_file: 'localhost-certbundle.pem'
dhparam_file: 'localhost-dhparam.pem'
name: 'localhost'
php_fpm_enabled: no
sftp:
user: '{{ server_sftp_user }}'
uuid: '{{ server_sftp_uuid }}'
authorized_keys: '{{ server_sftp_authorized_keys }}'
home: '{{ server_home }}'
port: '{{ server_sftp_port }}'
sftp_enabled: no
webroot: '{{ server_webroot }}'
aliases
Jeśli serwer powinien obsługiwać inne żądania niż te skierowane do server_name
, podaj listę nazw domen oddzielonych spacją. Użyj default
, aby utworzyć domyślny serwer Nginx. Domyślnie: ''
.
basic_auth_enabled
Ustaw na true
, aby włączyć podstawowe uwierzytelnianie dla tego serwera. Musisz dostarczyć plik htpasswd
i zapisać go w folderze files {{ server_name }}/htpasswd
.
force_www
Jeśli serwer powinien przekierować na domeny z prefiksem www
. Jeśli ustawione na yes
, wszystkie żądania do name
będą przekierowywane do subdomeny www. Musisz również dodać www.name
do właściwości aliases
. Domyślnie: no
.
https
Ustawienia związane z SSL/HTTPS.
enabled
Ustaw na yes
, aby włączyć SSL/HTTPS dla tego serwera. Żądania tylko HTTP będą przekierowywane do HTTPS.
letsencrypt_enabled
Jeśli ustawione, HTTPS jest włączone dla tego serwera, a certyfikaty będą tworzone przez Let's Encrypt oraz acme-client
. Musisz również ustawić nginx_letsencrypt_enabled
na yes
, aby włączyć tę funkcję. Domyślnie: no
.
name
Nazwa domeny tego serwera, np. example.com
. Domyślnie: default
.
php
Ustawienia związane z PHP.
fpm_enabled
Ustaw na prawdę, aby zainstalować i włączyć pakiet php-fpm
. Jeśli włączone, zainstalowane zostaną poniższe pakiety wymienione w nginx_php_fpm_pkgs
. Domyślnie: no
.
fastcgi_cache
Ustaw na off
, aby wyłączyć pamięć podręczną fastcgi. Domyślnie: z_nginx
.
max_requests
Liczba żądań, które każdy proces potomny powinien wykonać przed ponownym uruchomieniem. Domyślnie: 1000
.
max_children
Maksymalna liczba procesów potomnych, które mogą być tworzone. Domyślnie: 5
.
memory_limit
To ustawia maksymalną ilość pamięci w bajtach, którą skrypt może przydzielić. Domyślnie: 128M
.
upload_max_filesize
Maksymalny rozmiar przesyłanego pliku. Domyślnie: 48M
.
post_max_size
Ustawia maksymalny rozmiar dozwolonych danych post. Domyślnie: 64M
.
sftp_enabled
Włącz sftp
dla tego serwera. Tworzy użytkownika i dostosowuje ustawienia, jak opisano poniżej. Domyślnie: false
.
sftp
Ustawienia używane do skonfigurowania użytkownika i SSHD, aby umożliwić dostęp do katalogu głównego serwera internetowego w celu przesyłania plików.
user
Nazwa użytkownika sftp. Domyślnie: 'sftp_{{ name | truncate(5, True, "") }}'
.
uuid
UUID użytkownika sftp. Domyślnie: 5000
.
home
Katalog domowy użytkownika. sshd
zmieni katalog do tego katalogu. Ustaw folder główny serwera internetowego, gdy nie jest ustawiony. Domyślnie: '/srv/{{ name }}'
.
port
Zewnętrzny port, który powinien być przekierowany do jaila przy użyciu tego zestawu narzędzi. Domyślnie: 10022
.
authorized_keys
Klucz publiczny, który powinien być używany do uwierzytelniania użytkownika. Domyślnie: '{{ host_sshd_authorized_keys_file }}'
.
Zależności
Przykład Playbooka
Serwer proxy, który przekierowuje ruch do innego zewnętrznego serwera.
- hosts: all
become: true
tasks:
- import_role:
name: 'JoergFiedler.freebsd-jail-host'
- include_role:
name: 'JoergFiedler.freebsd-jailed-nginx'
vars:
nginx_pf_redirect: true
nginx_letsencrypt_enabled: yes
nginx_servers:
- name: 'test.moumantai.de'
https:
enabled: yes
letsencrypt_enabled: yes
proxy:
host: 'www.freebsd.org'
scheme: 'https'
port: 443
local: no
jail_net_ip: '10.1.0.10'
jail_name: 'nginx'
Serwer Nginx z modułem php-fpm
i HTTPS.
- hosts: all
become: true
tasks:
- import_role:
name: 'JoergFiedler.freebsd-jail-host'
- include_role:
name: 'JoergFiedler.freebsd-jailed-nginx'
vars:
jail_net_ip: '10.1.0.10'
jail_name: 'nginx'
nginx_pf_redirect: yes
nginx_servers:
- name: 'default'
https:
enabled: yes
php:
fpm_enabled: yes
sftp_enabled: yes
sftp:
authorized_keys: '~/.vagrant.d/insecure_private_key.pub'
Licencja
BSD
Informacje o autorze
Jeśli Ci się podoba lub masz pomysły na ulepszenie tego projektu, proszę otwórz zgłoszenie na GitHubie. Dziękujemy.
ansible-galaxy install JoergFiedler.freebsd-jailed-nginx