JoergFiedler.freebsd-jailed-nginx
freebsd-jailed-nginx
Este rol proporciona un servidor nginx enjaulado que escucha en localhost:{80,443}
para solicitudes entrantes.
El rol también proporciona una configuración SSL funcional utilizando la funcionalidad de Let's Encrypt.
Necesitas proporcionar un archivo dhparam.pem
personalizado. Crea una carpeta con el nombre de
tu servidor (example.com
) dentro de la carpeta files
junto a tu playbook.
El certificado será validado/generado periódicamente cada semana
. Para
iniciar el servidor de inmediato, se instala un certificado autogenerado para localhost.
Puedes generar tus certificados de Let's Encrypt manualmente después de que la cárcel haya
sido iniciada usando el siguiente comando:
/usr/local/bin/acme-client-weekly.sh
Este rol puede ser utilizado por otros roles para servir instalaciones de WordPress o Joomla. Para acceder al directorio webroot, también se configura un servidor SFTP, que se asegura mediante autenticación con clave pública.
Este rol también puede ser utilizado para crear un proxy que termina SSL y reenvía el tráfico a cárceles específicas de dominio o a sitios externos.
Requisitos
Este rol está diseñado para ser usado con una instalación nueva de FreeBSD. Hay una Vagrant Box con proveedores para VirtualBox y EC2 que puedes usar.
Variables del Rol
nginx_letsencrypt_enabled
Establecer en yes
habilita la gestión automática de certificados con Let's Encrypt
para todos los servidores nginx. Si está habilitado, instalará la herramienta acme-client
y
preparará alguna configuración para los servidores. Por defecto: no
.
nginx_letsencrypt_acme_private_key
Usa esta variable para especificar la clave privada que será utilizada por el cliente acme
para comunicarse con Let's Encrypt. Por defecto: '''
.
nginx_letsencrypt_api_host
El nombre del servidor con el que se comunicará. Por defecto: acme-v02.api.letsencrypt.org
.
nginx_tarsnap_enabled
Si el webroot de todos los servidores nginx debe ser respaldado usando tarsnap.
Debe estar habilitado en el host mismo (tarsnap_enabled: yes
). Por defecto:
{{ tarsnap_enabled | default("no") }}
.
nginx_syslogd_server
El servidor syslogd que nginx debería usar para escribir los registros de error y acceso.
Por defecto: {{ syslogd_server | default("localhost") }}
.
nginx_pf_redirect
Si se establece en yes
, el tráfico a los puertos http(s) será redirigido a este servidor nginx de la cárcel.
Por defecto: no
.
Si está habilitado, la configuración por defecto redirigirá el tráfico dirigido a los puertos 80
y 443 de la interfaz externa del host a esta cárcel. Esta configuración puede
cambiarse usando la variable nginx_pf_rdrs
.
nginx_pf_rdrs
Esto configura cómo funciona la redirección de tráfico del host a la cárcel. La configuración por defecto se ve así:
nginx_pf_rdrs:
- ports:
- 'http'
- 'https'
ext_ip: '{{ host_net_ext_ip }}'
ext_if: '{{ host_net_ext_if }}'
Esto significa que todo el tráfico que termina en la interfaz externa del host con ip externa para
ambos puertos https
y http
será redirigido al puerto http
del NGINX que se ejecuta dentro de la cárcel.
nginx_servers
Esta variable almacena un arreglo de instancias de servidores nginx para esta cárcel. Puedes usar esto para configurar diferentes tipos de cárceles nginx, por ejemplo, proxy que termina en https, servir múltiples sitios web estáticos o un sitio web habilitado para php. Ver la sección de ejemplo a continuación.
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
Si el servidor debe manejar otras solicitudes además de las dirigidas a server_name
.
Proporciona una lista de nombres de dominio separados por espacios. Usa default
para crear
un servidor por defecto de Nginx. Por defecto: ''
.
basic_auth_enabled
Establecer en true
para habilitar la autenticación básica para este servidor. Necesitas
proporcionar el archivo htpasswd
y guardarlo en la carpeta {{ server_name }}/htpasswd
.
force_www
Si el servidor debe redirigir a nombres de dominio que comienzan con www
. Si se establece en
yes
, todas las solicitudes a name
serán redirigidas al subdominio www. También necesitas
agregar www.name
a la propiedad aliases
. Por defecto: no
.
https
Configuraciones relacionadas con SSL/HTTPS.
enabled
Establecer en yes
para habilitar SSL/HTTPS para este servidor. Las solicitudes solo HTTP
serán redirigidas a HTTPS.
letsencrypt_enabled
Si se establece, https está habilitado para este servidor y los certificados serán creados por
Let's Encrypt y acme-client
. También necesitas establecer nginx_letsencrypt_enabled
en yes
para habilitar esta función. Por defecto: no
.
name
El nombre de dominio de este servidor, por ejemplo, example.com
. Por defecto: default
.
php
Configuraciones relacionadas con PHP.
fpm_enabled
Establecer en true para instalar y habilitar el paquete php-fpm
. Si está habilitado, los
siguientes paquetes listados en nginx_php_fpm_pkgs
serán instalados. Por defecto: no
.
fastcgi_cache
Establecer en off
para deshabilitar la caché fastcgi. Por defecto: z_nginx
.
max_requests
El número de solicitudes que debe ejecutar cada proceso hijo antes de reiniciarse. Por defecto: 1000
.
max_children
El número máximo de procesos hijo que se pueden crear. Por defecto: 5
.
memory_limit
Esto establece la cantidad máxima de memoria en bytes que un script puede asignar. Por defecto: 128M
.
upload_max_filesize
El tamaño máximo de un archivo que se puede cargar. Por defecto: 48M
.
post_max_size
Establece el tamaño máximo permitido para los datos de la publicación. Por defecto: 64M
.
sftp_enabled
Habilitar sftp
para este servidor. Crea un usuario y ajusta configuraciones como
se describe a continuación. Por defecto: false
.
sftp
Configuraciones utilizadas para configurar el usuario y configurar SSHD para permitir acceso a la raíz del servidor web para cargar archivos.
user
El nombre del usuario sftp. Por defecto: 'sftp_{{ name | truncate(5, True, "") }}'
.
uuid
El uuid del usuario sftp. Por defecto: 5000
.
home
El directorio home del usuario. sshd
cambiará la raíz a este directorio. Establece la
carpeta del servidor web cuando no esté establecido. Por defecto: '/srv/{{ name }}'
.
port
El puerto externo que debe ser redirigido a la cárcel usando este rol.
Por defecto: 10022
.
authorized_keys
La clave pública que se debe usar para autenticar al usuario. Por defecto: '{{ host_sshd_authorized_keys_file }}'
.
Dependencias
Ejemplo de Playbook
Host proxy, que reenvía el tráfico a otro servidor externo.
- 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'
Servidor Nginx con módulo php-fpm
y 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'
Licencia
BSD
Información del Autor
Si te gusta o tienes ideas para mejorar este proyecto, por favor abre un problema en GitHub. Gracias.
Provides a jailed nginx server.
ansible-galaxy install JoergFiedler.freebsd-jailed-nginx