Hace unos días me encontré con el problema de encriptar mediante SSL trafico HTTP de un webservice/Aplicación que originalmente no tiene soporte para SSL.
Llegue a una solución realmente rapida y sencilla que no implica que los desarrolladores modifiquen la aplicacion gracias a NGINX.
La idea es crear un bloque server SSL en NGINX y gracias al modulo proxy y el parametro proxy_pass, redireccionar todo el trafico hacia el servidor interno sin SSL. Esto permite mantener la aplicacion y la implementación intacta, agregando encriptación SSL en la comunicacion entre el cliente y nuestro reverse proxy (NGINX).

Ejemplo de configuración:

#ssl portion
server {
    listen          443;
    server_name     ws.example.com;
 
    # configuracion SSL especifica
    ssl on;
    ssl_certificate         /etc/ssl/nginx/nginx.pem;
    ssl_certificate_key     /etc/ssl/nginx/nginx.key;
 
    access_log      /var/log/nginx/ws.example.com.ssl_access_log main;
    error_log       /var/log/nginx/ws.example.com.ssl_error_log error;
 
    # WebServices URI
    location / {
        proxy_pass http://192.168.1.2;
    }
}

En el ejemplo creamos un vhost ws.example.com con la opción SSL y solicitamos todo el trafico dirigido a ese vhost al servidor alojado en la IP interna 192.168.1.2.

Adicionalmente se podría solo redireccionar alguna URI especifica modificando el bloque location.