web-dev-qa-db-fra.com

Comment exécuter SSL nginx sur un port non standard

Je me rends compte que cela ressemble à un double d'au moins quelques autres questions, mais je les ai lues plusieurs fois et je fais toujours quelque chose de mal.

Voici le contenu de mon fichier de configuration nginx myexample.com situé dans /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;

}

Cela fonctionne, quand je vais sur https://myexample.com le contenu est servi et la connexion est sécurisée. Donc cette config semble être bonne.

Maintenant, si je change le port ssl en 9443 et que je recharge la configuration nginx, la config se recharge sans erreur, mais la visite https://myexample.com montre une erreur dans le navigateur (ce site ne peut pas être atteint/monexemple.com a refusé de se connecter. ERR_CONNECTION_REFUSED)

J'ai essayé des suggestions et de la documentation ici , ici , et ici (entre autres) mais j'obtiens toujours l'erreur ERR_CONNECTION_REFUSED.

Je dois noter que je peux utiliser un port non standard, puis taper explicitement ce port dans l'URL, par exemple https://myexample.com:944 . Mais je ne veux pas faire ça. Ce que je veux, c'est qu'un utilisateur puisse taper myexample.com dans n'importe quel navigateur et que la redirection nginx vers la connexion sécurisée soit automatique.

Encore une fois, je n'ai aucun problème lorsque j'utilise le port SSL 443 standard.

Edit: J'utilise nginx/1.6.2 sur debian/jessie

16
GojiraDeMonstah

Afin de prendre en charge la saisie " https://myexample.com " dans votre navigateur, et le faire gérer par la configuration de nginx écoute sur le port 9443, vous aurez besoin d'une configuration supplémentaire de nginx qui écoute toujours sur le port 443, car il s'agit du port IP auquel le navigateur se connecte .

Donc:

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;
}

Notez que le même certificat/clé est nécessaire pour les deux sections, car le certificat est généralement lié au nom d'hôte DNS, mais pas nécessairement au port.

J'espère que cela t'aides!

23
Castaglia

Lorsque vous tapez https://example.com , la norme pour le schéma https: // est de se connecter au port 443. Dans votre cas, vous avez déplacé votre serveur afin qu'il écoute maintenant sur le port 9443. Vous obtenez le message connexion refusée à cause de cela - rien n'écoute sur le port 443.

Vous devrez prendre des dispositions pour écouter quelque chose sur le port 443 qui redirige les connexions vers le port 9443 ou utiliser un port dans le cadre de l'URL.

0
user9517