Cómo ejecutar nginx SSL en un puerto no estándar

15

Me doy cuenta de que esto parece un duplicado de al menos algunas otras preguntas, pero las he leído varias veces y todavía estoy haciendo algo mal.

Los siguientes son los contenidos de mi archivo de configuración nginx myexample.com ubicado en /etc/nginx/sites-available.

server {

  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
      index index.html index.htm;

}

Funciona, cuando voy a https://myexample.com se sirve el contenido y la conexión es segura. Entonces esta configuración parece ser buena.

Ahora, si cambio el puerto SSL a 9443 y vuelvo a cargar la configuración de nginx, la configuración se vuelve a cargar sin error, pero visitar https://myexample.com muestra un error en el navegador (no se puede acceder a este sitio / myexample.com se negó a conectar. ERR_CONNECTION_REFUSED)

He intentado sugerencias y documentación aquí , aquí y aquí (entre otros) pero siempre recibo el error ERR_CONNECTION_REFUSED.

Debo señalar que puedo usar un puerto no estándar y luego escribir explícitamente ese puerto en la URL, por ejemplo, https://myexample.com:9443 . Pero no quiero hacer eso. Lo que quiero es que un usuario pueda escribir myexample.com en cualquier navegador y que nginx redirija a la conexión segura automáticamente.

Nuevamente, no tengo ningún problema cuando uso el puerto estándar 443 SSL.

Editar: estoy usando nginx / 1.6.2 en debian / jessie

GojiraDeMonstah
fuente
1
mencionó que "debo tener en cuenta que puedo usar un puerto no estándar y luego escribir explícitamente ese puerto en la URL, por ejemplo, myexample.com:9443 ". ¿Puede explicar cómo pudo hacer esto porque quiero acceder a mi sitio web usando algo como " myexample.com:9443 " con SSL incluido
Ghassan Zein

Respuestas:

22

Para poder escribir " https://myexample.com " en su navegador y que la nginxconfiguración la escuche en el puerto 9443, necesitará una nginxconfiguración adicional que todavía escuche en el puerto 443, ya que ese es el puerto IP para que el navegador se conecta .

Así:

server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  # Redirect the browser to our port 9443 config
  return 301 $scheme://myexample.com:9443$request_uri;
}

server {
  listen 9443 ssl;
  listen [::]:9443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
  index index.html index.htm;
}

Observe que se necesita el mismo certificado / clave para ambas secciones, ya que el certificado generalmente está vinculado al nombre de host DNS, pero no necesariamente al puerto.

¡Espero que esto ayude!

Castaglia
fuente
Esta es la respuesta más completa, pero lo que creo que me está diciendo es que para redirigir a una conexión segura automáticamente, nginx todavía tiene que estar vinculado al puerto 443. ¿Es este el caso? Ese es el problema :-( Tengo otro proceso vinculado a ese puerto.
GojiraDeMonstah
Nginx es un proxy inverso. Puede hacer que escuche en 443 y pasar solicitudes a la aplicación correspondiente.
Tim
Tim, tienes razón. Probablemente hice una pregunta realmente tonta, pero esperaba que hubiera una manera de cambiar "mágicamente" el puerto SSL.
GojiraDeMonstah
@GojiraDeMonstah Si no desea utilizar el puerto 443, ingrese el número de puerto elegido en la URL. Eso es todo.
Michael Hampton
El "ssl" era bastante importante. Tuve default_server antes y luché con él durante bastante tiempo.
swateek
0

Cuando escribe https://example.com , el estándar para el esquema https: // es conectarse al puerto 443. En su caso, ha movido su servidor para que ahora escuche en el puerto 9443. Se rechaza la conexión mensaje debido a esto: nada está escuchando en el puerto 443.

Deberá hacer arreglos para que escuche algo en el puerto 443 que redirija las conexiones al puerto 9443 o use un puerto como parte de la URL.

usuario9517
fuente
-1

si cambia el puerto a uno no estándar como 9443, debe agregar una redirección de 443 a 9443. Configure nginx para invertir el proxy en ese puerto.

Kitsufan
fuente