Jak uruchomić nginx SSL na niestandardowym porcie

16

Zdaję sobie sprawę, że wygląda to na duplikat co najmniej kilku innych pytań, ale czytałem je kilka razy i wciąż robię coś złego.

Poniżej znajduje się zawartość mojego pliku konfiguracyjnego nexx myexample.com znajdującego się w /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;

}

Działa, kiedy wchodzę na https://myexample.com, treść jest obsługiwana, a połączenie jest bezpieczne. Więc ta konfiguracja wydaje się być dobra.

Teraz, jeśli zmienię port ssl na 9443 i przeładuję konfigurację nginx, konfiguracja przeładuje się bez błędów, ale odwiedzanie https://myexample.com pokazuje błąd w przeglądarce (nie można uzyskać dostępu do tej witryny / myexample.com odmówił połączyć. ERR_CONNECTION_REFUSED)

Próbowałem sugestii i dokumentacji tutaj , tutaj i tutaj (między innymi), ale zawsze pojawia się błąd ERR_CONNECTION_REFUSED.

Powinienem zauważyć, że mogę użyć niestandardowego portu, a następnie jawnie wpisać ten port w adres URL, np . Https://myexample.com:9443 . Ale nie chcę tego robić. Chcę, aby użytkownik mógł wpisać myexample.com w dowolnej przeglądarce i automatycznie przekierowywać nginx do bezpiecznego połączenia.

Ponownie nie mam żadnych problemów, gdy korzystam ze standardowego portu 443 SSL.

Edycja: Używam nginx / 1.6.2 na debian / jessie

GojiraDeMonstah
źródło
1
wspomniałeś, że „powinienem zauważyć, że mogę użyć niestandardowego portu, a następnie wyraźnie wpisać ten port w adres URL, np . myexample.com:9443 ”. Czy możesz wyjaśnić, jak udało ci się to zrobić, ponieważ chcę uzyskać dostęp do mojej witryny za pomocą czegoś takiego jak „ myexample.com:9443 ” z dołączonym SSL
Ghassan Zein

Odpowiedzi:

23

W celu wsparcia wpisując „ https://myexample.com ” w przeglądarce, i mając to obsługiwane przez nginxsłuchanie config na porcie 9443, trzeba będzie dodatkowy nginxconfig że nadal nasłuchuje na porcie 443, ponieważ jest to port IP które łączy przeglądarka .

A zatem:

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

Zauważ, że ten sam certyfikat / klucz jest potrzebny w obu sekcjach, ponieważ certyfikat jest zwykle powiązany z nazwą hosta DNS, ale niekoniecznie z portem.

Mam nadzieję że to pomoże!

Castaglia
źródło
To jest najbardziej kompletna odpowiedź, ale myślę, że mówisz mi, że w celu automatycznego przekierowania do bezpiecznego połączenia nginx nadal musi być związany z portem 443. Czy tak jest w przypadku? To jest problem :-( Mam inny proces związany z tym portem.
GojiraDeMonstah
Nginx jest odwrotnym proxy. Możesz ustawić, aby nasłuchiwał na 443 i przekazywał żądania do odpowiedniej aplikacji.
Tim
Tim - masz rację. Prawdopodobnie zadałem naprawdę głupie pytanie, ale miałem nadzieję, że istnieje sposób na „magiczną” zmianę portu SSL.
GojiraDeMonstah
@GojiraDeMonstah Jeśli nie chcesz używać portu 443, umieść wybrany numer portu w adresie URL. To wszystko.
Michael Hampton
„Ssl” był dość ważny. Miałem już default_server i przez jakiś czas miałem z nim problemy.
swateek
0

Po wpisaniu https://example.com standardem schematu https: // jest połączenie z portem 443. W twoim przypadku serwer został przeniesiony, aby teraz nasłuchiwał na porcie 9443. Otrzymujesz połączenie odrzucone wiadomość z tego powodu - nic nie nasłuchuje na porcie 443.

Konieczne będzie zorganizowanie podsłuchu na porcie 443, który przekieruje połączenia do portu 9443 lub użycie portu jako części adresu URL.

użytkownik9517
źródło
-1

jeśli zmienisz port na niestandardowy, taki jak 9443, musisz dodać przekierowanie z 443 na 9443. Ustaw nginx na odwrotne proxy do tego portu.

Kitsufan
źródło