fragen stichworte

nginx akzeptiert HTTP- und HTTPS-Anforderungen an zwei verschiedenen Ports

Ich habe ein Nginx-Server-Setup (zwei Konfigurationsdateien) mit zwei Gunicorn-Webservern eingerichtet und ausgeführt. Ein Gunicorn ist Produktion und der andere ist Inszenierung.

Ich möchte, dass Nginx http-Anfragen an xyz.com sowie https-Anfragen an xyz.com an den Produktions-Gunicorn-Server @ 127.0.0.1:8000 sendet.

Ich habe das mit

erreicht
server {
   listen 80;
   server_name xyz.com;
   return 301 https://$http_host$request_uri;
}

server {
   listen 443 ssl;
   server xyz.com;
   ..... <<< ssl stuff
  location/{
      .... proxy_stuff
      proxy_pass http://127.0.0.1:8000;
  }
}

Ich möchte auch, dass http-Datenverkehr nach xyz.com:8080 und https-Datenverkehr nach xyz.com:8080 auf den Staging-Server @ 127.0.0.1:8081 übertragen werden. Ich konnte https-Verkehr auf xyz.com:8080 wie folgt abrufen:

server {
   listen 8080 ssl;
   server_name xyz.com;
   ...... << ssl stuff
   location/{
      ...... << proxy stuff
      proxy_pass http://127.0.0.1:8081;
   }
}

Ich kann jedoch keinen Weg finden, um den http-Verkehr bei xyz.com:8080 an den https-Verkehr bei xyz.com:8080 umzuleiten. Ich habe die gleiche Umleitung wie bei Port 80 ausprobiert, war aber nicht erfolgreich.

Könnte eine Richtung verwenden.

antworten

Basierend auf dem, was Sie gesagt haben, Sie möchten HTTP und https an Port 8080 abhören, was meines Erachtens nicht möglich ist. Richten Sie verschiedene Serverblöcke für verschiedene Ports ein. Mit dem Standortblock im Inneren können Sie denselben Proxy_Pass verwenden, um ihn an einen beliebigen Ort zu übergeben.

Hierbei handelt es sich wahrscheinlich um das, was Sie am nächsten können, was Sie gesagt haben: 8080 http, 8081 https und Weiterleiten von http an https. Das Umschreiben ist möglicherweise nicht genau richtig, aber Sie haben die Idee.

server {
  listen 8080; # HTTP
  server_name example.com;
  rewrite ^ https://example.com:8081$request_uri? redirect;
  # rewrite ^ https://example.com:8081 redirect; # Alternate rewrite
}

server {
  listen 8081 ssl;
  server_name example.com;
  ...... << ssl stuff
  location/{
    ...... << proxy stuff
    proxy_pass http://127.0.0.1:8081;
  }
}