So führen Sie nginx SSL auf einem nicht standardmäßigen Port aus

15

Mir ist klar, dass dies wie ein Duplikat von mindestens ein paar anderen Fragen aussieht, aber ich habe sie jedes Mal mehrmals gelesen und mache immer noch etwas falsch.

Im Folgenden finden Sie den Inhalt meiner myexample.com-Nginx-Konfigurationsdatei in /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;

}

Es funktioniert, wenn ich zu https://myexample.com gehe, wird der Inhalt bereitgestellt und die Verbindung ist sicher. Diese Konfiguration scheint also gut zu sein.

Wenn ich nun den SSL-Port auf 9443 ändere und die nginx-Konfiguration neu lade, wird die Konfiguration ohne Fehler neu geladen, aber wenn ich https://myexample.com besuche , wird ein Fehler im Browser angezeigt connect. ERR_CONNECTION_REFUSED)

Ich habe hier , hier und hier (unter anderem) Vorschläge und Dokumentation ausprobiert , erhalte jedoch immer den Fehler ERR_CONNECTION_REFUSED.

Ich sollte beachten, dass ich einen nicht standardmäßigen Port verwenden und diesen dann explizit in die URL eingeben kann, z . B. https://myexample.com:9443 . Das will ich aber nicht. Ich möchte, dass ein Benutzer myexample.com in einen beliebigen Browser eingeben und Nginx automatisch zur sicheren Verbindung umleiten kann.

Auch hier habe ich keinerlei Probleme, wenn ich den standardmäßigen 443-SSL-Port verwende.

Edit: Ich benutze Nginx / 1.6.2 unter Debian / Jessie

GojiraDeMonstah
quelle
1
Sie haben Folgendes erwähnt: "Ich sollte beachten, dass ich einen nicht standardmäßigen Port verwenden und diesen Port dann explizit in die URL eingeben kann , z . B. myexample.com:9443 ." Können Sie mir bitte erklären, wie Sie das geschafft haben, weil ich mit smth wie " myexample.com:9443 " auf meine Website zugreifen möchte, einschließlich SSL
Ghassan Zein

Antworten:

22

Um die Eingabe von " https://myexample.com " in Ihrem Browser zu unterstützen und von der nginxKonfiguration auf Port 9443 überwachen zu lassen, benötigen Sie eine zusätzliche nginxKonfiguration, die weiterhin auf Port 443 lauscht, da dies der IP-Port ist was der Browser verbindet .

Somit:

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

Beachten Sie, dass für beide Abschnitte dasselbe Zertifikat / derselbe Schlüssel benötigt wird, da das Zertifikat normalerweise an den DNS-Hostnamen gebunden ist, jedoch nicht unbedingt an den Port.

Hoffe das hilft!

Castaglia
quelle
Dies ist die vollständigste Antwort, aber ich denke, Sie sagen mir, dass Nginx immer noch an Port 443 gebunden sein muss, um automatisch zu einer sicheren Verbindung umzuleiten. Ist dies der Fall? Das ist das Problem :-( Ich habe einen anderen Prozess an diesen Port gebunden.
GojiraDeMonstah
Nginx ist ein Reverse Proxy. Sie können es 443 abhören lassen und Anforderungen an die entsprechende Anwendung weiterleiten.
Tim
Tim - du hast recht. Wahrscheinlich habe ich eine wirklich blöde Frage gestellt, aber ich hatte gehofft, dass es eine Möglichkeit gibt, den SSL-Port auf magische Weise zu ändern.
GojiraDeMonstah
@GojiraDeMonstah Wenn Sie Port 443 nicht verwenden möchten, geben Sie Ihre ausgewählte Portnummer in die URL ein. Das ist alles.
Michael Hampton
Das "ssl" war ziemlich wichtig. Ich hatte schon einmal default_server und hatte einige Zeit damit zu kämpfen.
Swateek
0

Wenn Sie https://example.com eingeben , besteht der Standard für das Schema https: // darin, eine Verbindung zu Port 443 herzustellen. In Ihrem Fall haben Sie Ihren Server so verschoben, dass er jetzt Port 9443 überwacht. Die Verbindung wird abgelehnt Nachricht aus diesem Grund - Port 443 wird nicht abgehört.

Sie müssen dafür sorgen, dass Port 443 abgehört wird, um Verbindungen zu Port 9443 umzuleiten, oder einen Port als Teil der URL verwenden.

user9517
quelle
-1

Wenn Sie den Port in einen nicht standardmäßigen Port wie 9443 ändern, müssen Sie eine Umleitung von 443 zu 9443 hinzufügen. Legen Sie nginx fest, um den Proxy für diesen Port umzukehren.

Kitsufan
quelle