fragen stichworte

Nginx transparenter Reverse Proxy für https und http zu einem anderen Server

Ich habe dies eine Zeit lang recherchiert, aber die Anwendungsfälle, nach denen andere gefragt haben, sind komplexer/abweichender von dem, was ich erreichen möchte.

Ich habe Nginx-Servingseiten an beiden Ports 80 und 443 für Site, beispielsweise example1.com. Es funktioniert gut mit http und https. Ich habe jetzt einen zweiten Server in meinem internen Netzwerk, auf dem Apache ausgeführt wird. Dies ist für eine zweite Site mit dem Namen beispiel2.com. Ich habe eine einzige Wan-IP-Adresse, auf die die A-Einträge beider Sites verweisen.

Mein Router leitet die Ports 80 und 443 an den Nginx-Server weiter. Ich möchte, wenn Nginx überprüfen könnte, ob die Anfrage für example1.com oder example2.com war und beispiel1.com wie jetzt an sich selbst sendet, aber einfach den gesamten Datenverkehr für example2.com an den Apache-Server weiterleitet. Da ich alle SSL-Zertifikate ordnungsgemäß auf dem Apache-Server example2.com eingerichtet habe, hoffe ich, dass Nginx alles transparent an Apache weitergibt. Ich denke ich brauche einen Proxy-Pass. Muss ich auch die gleichen Zertifikate auf Nginx einrichten oder kann das alles transparent an den Apache-Server weitergegeben werden, als hätte ich Port 443 direkt an ihn weitergeleitet? Eine vorgeschlagene Konfiguration wäre dankbar.

antworten

Sie benötigen lediglich einen neuen Serverblock, in dem server_name auf die zweite Domäne und ein proxy_pass auf den Speicherort gesetzt ist. Wenn Sie https benötigen, können Sie entweder ein anderes Zertifikat oder das gleiche Zertifikat auflisten, wenn es die richtigen alternativen Namen hat. Dies wird im Nginx Einsteigerhandbuch behandelt.

server {
  server_name example.com;
  listen 80;
  listen 443 ssl http2;

  ssl_certificate/var/lib/acme/certs/xyz/fullchain;
  ssl_certificate_key/var/lib/acme/certs/xyz/privkey;

  # Set up preferred protocols and ciphers. TLS1.2 is required for HTTP/2
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

  # This is a cache for SSL connections
  ssl_session_cache shared:SSL:5m;
  ssl_session_timeout 60m;

  location/{
    proxy_pass http://example.com;
  }
}