Comment exécuter SSL nginx sur un port non standard

15

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, lorsque je vais sur https://myexample.com, le contenu est servi et la connexion est sécurisée. Donc, cette configuration semble bonne.

Maintenant, si je change le port ssl en 9443 et que je recharge la configuration nginx, la config se recharge sans erreur, mais visiter https://myexample.com montre une erreur dans le navigateur (Ce site ne peut pas être atteint / myexample.com a refusé de connectez. 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:9443 . 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

GojiraDeMonstah
la source
1
vous avez mentionné que "je devrais noter que je peux utiliser un port non standard, puis taper explicitement ce port dans l'URL, par exemple, monexemple.com:9443 ." Pouvez-vous s'il vous plaît expliquer comment avez-vous pu faire cela parce que je veux accéder à mon site Web en utilisant smth comme " myexample.com:9443 " avec SSL inclus
Ghassan Zein

Réponses:

22

Pour prendre en charge la saisie " https://myexample.com " dans votre navigateur et de le faire gérer par l' nginxécoute de configuration sur le port 9443, vous aurez besoin d'une nginxconfiguration supplémentaire 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!

Castaglia
la source
C'est la réponse la plus complète, mais je pense que vous me dites que pour rediriger automatiquement vers une connexion sécurisée, nginx doit toujours être lié au port 443. Est-ce le cas? C'est le problème :-( J'ai un autre processus lié à ce port.
GojiraDeMonstah
Nginx est un proxy inverse. Vous pouvez le faire écouter sur 443 et transmettre les demandes à l'application appropriée.
Tim
Tim - tu as raison. J'ai probablement posé une vraie question stupide mais j'espérais qu'il y avait un moyen de changer "magiquement" le port SSL.
GojiraDeMonstah
@GojiraDeMonstah Si vous ne voulez pas utiliser le port 443, vous mettez votre numéro de port choisi dans l'URL. C'est tout.
Michael Hampton
Le "ssl" était assez important. J'avais auparavant default_server et je me suis débattu avec pendant un certain temps.
swateek
0

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 pour qu'il écoute maintenant sur le port 9443. La connexion est refusée message à cause de cela - rien n'écoute sur le port 443.

Vous devrez organiser une écoute sur le port 443 qui redirige les connexions vers le port 9443 ou utiliser un port dans le cadre de l'URL.

user9517
la source
-1

si vous changez le port en un port non standard comme 9443, vous devez ajouter une redirection de 443 à 9443. Définissez nginx pour inverser le proxy sur ce port.

Kitsufan
la source