Commit b22f4192 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Merge branch 'dev' into 'master'

Omite funciones de cacheo, limpia y documenta

See merge request redmic-project/gateway/nginx-proxy-https!17
parents ada8e6d4 af0a111e
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
# Nginx proxy HTTPS

Nginx service configured to act as a proxy to Traefik service. Add caching and bot protection capabilities
Nginx service configured to act as a proxy to Traefik service. Add bot protection capabilities

Este servicio sirve de proxy inverso al frente de *Traefik*, para aportar funciones de las que este último carece.

@@ -8,12 +8,10 @@ Este servicio sirve de proxy inverso al frente de *Traefik*, para aportar funcio

* Sustituye a Traefik (que actúa a nivel interno) como punto de entrada a los servicios web. Recibe peticiones para cualquier dominio, y las propaga para que sean resueltas por Traefik hacia los contenedores apropiados.

* Sirve a través de HTTPS todos los servicios, que funcionan sobre HTTP localmente. Carga los certificados y los parámetros Diffie-Hellman con la ayuda de [certificates-manager](https://gitlab.com/redmic-project/gateway/certificates-manager).
* Sirve a través de HTTPS todos los servicios, que funcionan sobre HTTP (o HTTPS si es necesario) localmente. Carga los certificados y los parámetros Diffie-Hellman con la ayuda de [certificates-manager](https://gitlab.com/redmic-project/gateway/certificates-manager).

* Comprime las respuestas a las peticiones con gzip, disminuyendo el tráfico de red.

* Implementa un mecanismo de caché, configurable por subdominios, rutas, cabeceras, etc. Ayuda a reducir la carga de los servicios, devolviendo directamente respuestas que ya se han devuelto recientemente.

* Protege frente al acceso malicioso, por parte de bots o desde orígenes sospechosos. Toma la información de [mariusv/nginx-badbot-blocker](https://github.com/mariusv/nginx-badbot-blocker) para ello.

## Volúmenes
@@ -24,14 +22,14 @@ Se definen diferentes volúmenes para lograr persistencia del servicio, al mismo

Almacena aquellos ficheros que no son secretos y que interesa conservar entre reinicios del servicio, como los parámetros Diffie-Hellman. Se trata de un volumen externo al servicio.

### cache-vol

Conserva los ficheros de caché generados durante el funcionamiento del servidor web. Para limpiar la caché, es posible reiniciar el servicio tras borrar este volumen, y se volverá a regenerar de nuevo sin inconvenientes.

## Configuraciones

Para poder contemplar varios casos de uso (según entorno de despliegue, por ejemplo) se definen configs de Docker, estáticas para el servicio pero que permiten mayor flexibilidad.

### default

Define los servers que darán el servicio.

### blockips

Contiene un listado de IP que deben bloquearse siempre. Procede originalmente de <https://github.com/mariusv/nginx-badbot-blocker/blob/master/blockips.conf>, pero es posible añadir más IP a la lista.
@@ -40,6 +38,22 @@ Contiene un listado de IP que deben bloquearse siempre. Procede originalmente de

Define aquellos agentes (para identificar bots), dominios y URL que deben ser bloqueados. Procede originalmente de <https://github.com/mariusv/nginx-badbot-blocker/blob/master/blacklist.conf>, pero ha sido ampliado y es posible editarlo. Por ejemplo, para bloquear bots de rastreo o para conceder acceso a un agente concreto.

### block-requests

Aplica los bloqueos configurados desde blacklist.

### ssl-params

Provee los parámetros relativos al uso de certificados.

### ssl-certs

Provee la importación de los certificados para su uso.

### gzip

Mantiene una relación de extensiones a comprimir y los parámetros usados para ello.

## Secretos

Del mismo modo que con las configs, se usan secrets de Docker para almacenar aquellas configuraciones que además no deben ser públicas.
+0 −21
Original line number Diff line number Diff line
# Preparación de evaluación de control de caché para un dominio concreto, según parámetros
map $arg_request $cache_control_atlas_value {
	GetMap "max-age=864000";
	GetTile "max-age=864000";
	default "no-cache";
}

# Preparación de evaluación de control de caché para un dominio concreto, según ruta
map $request_uri $cache_control_redmic_value {
	~^/api/.* "no-cache max-age=3600";
	default "max-age=3600";
}

# Evaluación de control de caché del lado del cliente según dominio
# Crear variables '$cache_control_<dominio>_value' según sea necesario
map $http_host $cache_control_value {
	hostnames;
	atlas.* $cache_control_atlas_value;
	redmic.* $cache_control_redmic_value;
	default "no-cache";
}
+10 −4
Original line number Diff line number Diff line
@@ -7,11 +7,17 @@ server {
	listen [::]:443 ssl http2 ipv6only=on;
	listen 443 ssl http2 default_server;

	access_log off;
	sendfile on;
	tcp_nopush on;
	keepalive_timeout 3600;
	types_hash_max_size 2048;
	server_tokens off;
	client_max_body_size 2048M;

	include /etc/nginx/snippets/block-bad-request.conf;

	location / {
		include /etc/nginx/snippets/cache-usage.conf;

		proxy_set_header Host $host;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
@@ -23,7 +29,6 @@ server {
	}

	location = /nginx-health {
		access_log off;
		log_not_found off;
		return 204;
	}
@@ -33,8 +38,9 @@ server {
	listen [::]:80 ipv6only=on;
	listen 80 default_server;

	location = /nginx-health {
	access_log off;

	location = /nginx-health {
		log_not_found off;
		return 204;
	}
+0 −45
Original line number Diff line number Diff line
# Evaluación de uso de caché (y zona) según dominio
# Por defecto, no se usa caché
map $http_host $proxy_cache_zone {
	hostnames;
	atlas.* atlas_cache;
	redmic.* redmic_cache;
	default off;
}

# Preparación de evaluación de bypass de caché para un dominio concreto, según parámetros
map $arg_request $proxy_cache_bypass_atlas_value {
	GetMap 0;
	GetTile 0;
	default 1;
}

# Preparación de evaluación de bypass de caché para un dominio concreto, según ruta
map $request_uri $proxy_cache_bypass_redmic_value {
	~^/api/mediastorage/.* 0;
	~^/api/.* 1;
	default 0;
}

# Evaluación de bypass de caché según dominio
# Crear variables '$proxy_cache_bypass_<dominio>_value' según sea necesario
map $http_host $proxy_cache_bypass_value {
	hostnames;
	atlas.* $proxy_cache_bypass_atlas_value;
	redmic.* $proxy_cache_bypass_redmic_value;
	default 0;
}

proxy_cache_path /var/nginx/cache/atlas
	levels=1:2
	keys_zone=atlas_cache:5m
	inactive=7d
	use_temp_path=off
	max_size=495m;

proxy_cache_path /var/nginx/cache/redmic
	levels=1:2
	keys_zone=redmic_cache:1m
	inactive=30d
	use_temp_path=off
	max_size=199m;

deploy/config/nginx.conf

deleted100644 → 0
+0 −29
Original line number Diff line number Diff line
user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
	worker_connections 1024;
	multi_accept on;
}

http {
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	access_log off;

	sendfile on;
	tcp_nopush on;

	keepalive_requests 1000;
	keepalive_timeout 3600;

	types_hash_max_size 2048;
	server_tokens off;
	client_max_body_size 2048M;

	include /etc/nginx/conf.d/*;
}
Loading