Mientras configuro una aplicación NodeJS en Ubuntu 16.04, me he encontrado con un comportamiento extraño. La aplicación solo funciona con la dependencia de http pero no con la dependencia de https.
Mi aplicación NodeJS se ejecuta en el puerto 8081 y estoy usando el proxy inverso Nginx con SSL para redirigir las llamadas al puerto 8081. El siguiente es mi archivo default.conf en el directorio site-enabled Nginx.
# HTTP - redirect all requests to HTTPS: server { listen 80; listen [::]:80 default_server ipv6only=on; return 301 https://$host$request_uri; } # HTTPS - proxy requests on to local Node.js app: server { listen 443; server_name test.com; ssl on; # Use certificate and key provided by Let's Encrypt: ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # Pass requests for / to localhost:8081: location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8081/; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; proxy_redirect off; } }El siguiente es el script de prueba que estoy ejecutando en el servidor Node.
var https = require('https'); https.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Welcome to Test App'); }).listen(8081, 'localhost'); console.log('Server running at http://localhost:8081/'); Obtengo 502 Bad Gateway cuando pruebo el sitio usando test.com . Pero, extrañamente, cuando cambio la dependencia de https a http, todo funciona a la perfección.
¿Cuál podría ser el problema del comportamiento extraño? ¿No podemos usar https con configuración SSL con Nginx? Como estoy buscando usar una conexión de pares confiable, también es necesario usar https con NodeJS.
Dado que su aplicación Node.js está escuchando en https, su servidor Nginx debe reenviar las solicitudes a https://localhost:8081/ en lugar de a http://localhost:8081 , por lo que debe establecer su valor proxy_pass en https://localhost:8081/