Usar Nginx como SSL/TLS Offloading de Jira

En esta entrada se verá como configurar Nginx como proxy SSL/TLS OffLoading de Atlassian JIRA Software, para ello solo es necesario:

  1. Configurar el conector de Tomcat.
  2. Configurar Nginx.

Configurar el conector de Tomcat

A continuación se detalla como configurar el conector para admitir conexiones HTTP, además de indicar el método, el host y el puerto que deben usar las aplicaciones que corren dentro del Tomcat al construir URL absolutas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Connector port="8080"
maxThreads="150"
minSpareThreads="25"
connectionTimeout="20000"
enableLookups="false"
maxHttpHeaderSize="8192"
protocol="HTTP/1.1"
useBodyEncodingForURI="true"
redirectPort="8443"
acceptCount="100"
disableUploadTimeout="true"
proxyName="jira.my-company.com"
proxyPort="443"
scheme="https"/>

Los atributos usados son:

  • maxThreads, determina el número máximo de hilos, es decir, el úmero de peticiones simultaneas adminitidas. Valor por defecto 200.
  • minSpareThreads, determina el número mínimo de hilos que se mantendran en ejecución. Valor por defecto 10.
  • connectionTimeout, tiempo de espera máximo, medido en milisegundos, desde que se establece la conexión hasta que se recibe la petición. Si se supera el tiempo de espera y no se ha recibido la petición, la conexión será cerrada. Valor por defecto 60.000 (60 segundos).
  • enableLookup, booleano true/false para indicar si se desea activar, o no, la resolución de DNS a través de la función request.getRemoteHost().
  • maxHttpHeaderSize, especifica el tamaño máximo en bytes de la cabecera HTTP para las peticiones y respuestas.
  • protocol, indica el protocolo aceptado.
  • useBodyEncodingForURI, especifica si la codificación especificada en contentType debe utilizarse para los parámatreos de la URI en lugar de utilizar la codificación URIEncoding.
  • redirectPort, indica el puerto al que debe ser redirigida la conexión en caso de que el conector no admita conexiones SSL y la conexión entrante sea SSL.
  • acceptCount, especifica el tamaño máximo de la cola de peticiones. La cola de peticiones comienza a llenarse cuando el número de peticiones supere el número de hilos especificado en maxThreads.
  • disableUploadTimeout, booleano que especifica si un servlet puede utilizar (disable') o no (true`) un timeout mayor para las subidas de datos.
  • proxyName y proxyPort, estos atributos modifican los valores devueltos por los métodos request.getServerName() y request.getServerPort(). Estos métodos son utilizados para construir las URL absolutas de las redirecciones. Si no configura estos valores, los métodos devolveran el host y puerto de la conexión del proxy en lugar de los valores de conexión del cliente.
  • scheme, modifica el valor (https/https) devuelto por el método request.getScheme().

Más información:

Configurar Nginx

A continuación se detalla como configurar Nginx para que funcione como proxy de Jira además de como punto de terminación de cifrado SSL/TLS (SSL/TLS Offloading).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 443 default_server ssl;
server_name jira.my-company.com;
client_max_body_size 100M;
ssl_certificate /etc/pki/tls/certs/jira.my-company.com.crt;
ssl_certificate_key /etc/pki/tls/certs/jjira.my-company.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
access_log /var/log/nginx/proxy_access_log;
error_log /var/log/nginx/proxy_error_log;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

  • proxy_pass, indica el protocolo (http o https), el servidor, el puerto y la uri donde se direccionarán las peticiones.
  • proxy_set_header, permite agregar cabeceras a la petición antes de pasarla al servidor de destino.
  • proxy_connect_timeout, define el máximo de segundos de espera para establecer la conexión con el servidor de destino antés de dar un timeout.
  • proxy_send_timeout, define el máximo de segundos de espera para transmitir la petición al servidor, superado este timepo el cliente recibirá un timeout. El timeout solo tiene en cuenta el tiempo de espera entre la transmisión de dos peticiones consecutivas, y no el tiempo de transmisión de una petición al completo.
  • proxy_read_timeout, define el máximo de segundos de espera para recibir del servidor la respuesta a una petición, superado este tiempo el cliente recibirá un timeout. El timeout solo tiene en cuenta la espera entre la recepción de dos peticiones consecutivas, y no el tiempo de recepción de la respuesta de una petición al completo.
  • send_timeout, define el máximo de segundos de espera para transmitir la respuesta al cliente, superado este tiempo el cliente recibirá un timeout. El timeout solo tiene en cuenta el tiempo de espera entre la transmisión de dos peticiones consecutivas, no el tiempo de transmisión de una petición al completo.

Más información:

Entradas de interés

Contenidos
  1. 1. Configurar el conector de Tomcat
  2. 2. Configurar Nginx