reverso proxy_pass example ssl https nginx proxy wildcard-subdomain

ssl - proxy_pass - Proxy nginx basado en host cuando se usa https



nginx ssl proxy_pass https (3)

Encontré la solución que consiste básicamente en definir las opciones SSL y el certificado SSL fuera del bloque "servidor":

ssl_certificate ssl/mysite.com.crt; ssl_certificate_key ssl/mysite.com.key; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+EXP; ssl_prefer_server_ciphers on; server { listen 80; server_name *.mysite.com; rewrite ^ https://$host$request_uri? permanent; } server { listen 443 ssl; server_name one.mysite.com; ssl on; location / { proxy_pass http://localhost:8080; } } server { listen 443 ssl; server_name two.mysite.com; ssl on; location / { proxy_pass http://localhost:8090; } }

Cosas clave:

  • "ssl en" es lo único que debe estar dentro de los bloques del "servidor" que escuchan en https, también puede ubicarlo afuera, pero lo que hará que los bloques del "servidor" que escuchan en el puerto 80 utilicen el protocolo https y no el http esperado.
  • Debido a que "ssl_certificate", "ssl_ciphers: y otros" ssl_ * "están fuera del bloque" servidor ", Nginx realiza la descarga de SSL sin un nombre de servidor. Esto es lo que debería hacer, ya que el descifrado de SSL no puede ocurrir en base a ningún nombre de host , como en esta etapa la URL está encriptada.
  • JAVA y el rizo no dejan de funcionar ahora. No hay ningún nombre de servidor - host miss match.

Necesito usar Nginx como un proxy SSL, que reenvía el tráfico a diferentes backends dependiendo del subdominio.

Parece que en todas partes debo definir varias secciones de "servidor {" pero eso no funciona correctamente para SSL. Haciendo eso, siempre tendría el SSL que se está procesando en el primer host virtual ya que el nombre del servidor es desconocido hasta que procesa el tráfico https.

Guión:

  • Una dirección IP
  • Un comodín SSL comodín
  • Múltiples backends a los que se debe acceder como el siguiente:

    https://one.mysite.com/ -> http://localhost:8080 https://two.mysite.com/ -> http://localhost:8090

Nginx dice "si" es malo: http://wiki.nginx.org/IfIsEvil , pero ¿qué más puedo hacer?

He intentado esto, pero no funciona, recibo un error 500 pero nada en los registros de errores.

server { listen 443; server_name *.mysite.com; ssl on; ssl_certificate ssl/mysite.com.crt; ssl_certificate_key ssl/mysite.com.key; location / { if ($server_name ~ "one.mysite.com") { proxy_pass http://localhost:8080; } if ($server_name ~ "two.mysite.com") { proxy_pass http://localhost:8090; } }

¿Alguien ha logrado lograr esto con Nginx? Cualquier ayuda / alternativa, enlace, sería muy apreciada.