Implementierung von Debugging-Code über den Nginx-Reverse-Proxy

Implementierung von Debugging-Code über den Nginx-Reverse-Proxy

Hintergrund

Heutzutage werden die Projekte des Unternehmens so entwickelt, dass Front-End und Back-End getrennt sind. Manchmal möchte ich aufgrund neuer Entwicklungsanforderungen oder Fehlerbehebungen, dass das Front-End zum Debuggen eine direkte Verbindung zu meiner lokalen Entwicklungsumgebung herstellt, aber ich habe den Front-End-Code nicht und kann ihn daher nur über die vom Front-End bereitgestellte Testumgebung testen. Am einfachsten ist es, den Host direkt zu ändern, damit der Domänenname der Back-End-Testumgebung auf meine lokale IP verweist. Dies ist für HTTP-Protokolldienste sehr einfach, aber die Testumgebung des Unternehmens verwendet ausschließlich HTTPS und mein lokaler Dienst verwendet das HTTP-Protokoll. Selbst wenn der Host geändert wird, schlägt die Anforderung aufgrund der unterschiedlichen Protokolle fehl, sodass der lokale Dienst auf HTTPS aktualisiert werden muss.

planen

Tatsächlich unterstützt Springboot selbst HTTPS (howto-configure-ssl), aber dazu muss der Projektcode geändert werden, was nicht sehr elegant ist. Daher möchte ich nginx verwenden, um einen Reverse-Proxy direkt zum lokalen Dienst zu verwenden. Auf diese Weise muss der Code nicht geändert werden, um HTTPS auf nginx -Ebene zu verwenden. Sie müssen nur den Host ändern, um后端測試環境域名auf die IP nginx -Dienstes zu verweisen. Dies kann auch auf die Entwicklung und Fehlerbehebung anderer HTTP-Dienste angewendet werden.

Ausstellung von Zertifikaten

Zuerst müssen Sie einen Satz Zertifikate für die SSL-Konfiguration von nginx generieren. Verwenden Sie das Tool openssl , um einen Satz根證書und entsprechende服務證書zu generieren.

Stammzertifikatgenerierung

# Generieren Sie einen privaten RSA-Schlüssel openssl genrsa -out root.key 2048
# Generieren Sie ein Stammzertifikat mit dem privaten Schlüssel openssl req -sha256 -new -x509 -days 365 -key root.key -out root.crt \
  -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=Arbeit/CN=fakerRoot"

Generierung von Serverzertifikaten

# Generieren Sie einen privaten RSA-Schlüssel openssl genrsa -out server.key 2048
# Erstellen Sie eine Zertifikatsignieranforderungsdatei mit der SAN-Erweiterung openssl req -new \
  -sha256 \
  -key server.schlüssel \
  -subj "/C=CN/ST=GD/L=SZ/O=lee/OU=Arbeit/CN=xxx.com" \
  -erfordert SAN \
  -config <(cat /etc/pki/tls/openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=DNS:*.xxx.com,DNS:*.test.xxx.com")) \
  -out server.csr
# Verwenden Sie das zuvor generierte Stammzertifikat zum Ausgeben von openssl ca -in server.csr \
  -md sha256 \
  -keyfile root.schlüssel \
  -cert root.crt \
  -Erweiterungen SAN \
  -config <(cat /etc/pki/tls/openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=DNS:xxx.com,DNS:*.test.xxx.com")) \
  -out server.crt

Dadurch erhalten wir drei Schlüsseldateien:

  • root.crt : Stammzertifikat
  • server.key : privater Schlüssel des Serverzertifikats
  • server.crt : Server-Zertifikat
Hinweis: Der Domänenname des generierten Serverzertifikats muss den Domänennamen unterstützen, auf den die Testumgebung zugreift. Andernfalls meldet der Browser, dass das Zertifikat nicht sicher ist.

Nginx-Konfiguration

Der Einfachheit halber starten wir für den Zugriff direkt über docker einen Nginx-Container und mounten das Zertifikat und die Konfigurationsdatei in das entsprechende Verzeichnis:

nginx.conf

Server {
  hören Sie 443 SSL;
  Servername _;
  ssl_certificate "/usr/local/nginx/ssl/server.pem";
  ssl_certificate_key "/usr/local/nginx/ssl/server.key";
  Standort / {
    Proxy_Set_Header X-Real-IP $Remote_Addr;
    proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
    Proxy_set_header X-Weitergeleitet-Proto $scheme;
    Proxy_set_header Host $http_host;
    Proxy_set_header X-NginX-Proxy wahr;
    Proxy_Set_Header-Upgrade $http_upgrade;
    proxy_set_header Verbindung "Upgrade";
    Proxy-Passwort http://127.0.0.1:3000;
    Proxy_Redirect aus;
    Proxy_http_Version 1.1;
  }
}

Geben Sie das Zertifikat und den privaten Schlüssel des Servers an, indem Sie ssl_certificate und ssl_certificate_key konfigurieren, und geben Sie die Zugriffsadresse der Entwicklungsumgebung mit proxy_pass an.

Start-up

docker run -d --name https -p 443:443 -v ~/forword/ssl:/usr/local/nginx/ssl -v ~/forword/config/nginx.conf:/etc/nginx/conf.d/default.conf nginx

Hängen Sie die Nginx-Konfigurations- und Zertifikatsdateien in das entsprechende Verzeichnis ein und geben Sie Port 443 frei, damit Sie nach dem Start des Dienstes über https auf die lokale Entwicklungsumgebung zugreifen können.

Installieren des Stammzertifikats

Da das Dienstzertifikat selbstsigniert ist und vom Browser nicht als vertrauenswürdig angesehen wird, muss根證書im Betriebssystem installiert werden.

Öffnen Sie den Chrome-Browser->Einstellungen->Erweitert->Zertifikate verwalten

Vertrauenswürdige Stammzertifizierungsstellen -> Importieren

Wählen Sie das zuvor generierte Stammzertifikat root.crt zum Importieren aus

Host ändern

Wenn ein Debugging erforderlich ist, müssen Sie nur den lokalen Dienst starten, den zu testenden Domänennamen im Host in die IP des nginx -Servers auflösen und dann die Front-End-Anforderung an die Entwicklungsumgebung weiterleiten. Das Zertifikat ist über小鎖圖標in der Adressleiste des Browsers sichtbar und der verifizierte Dienst wurde erfolgreich bereitgestellt.

Nachtrag

Tatsächlich wurden in diesem Artikel zwei Lösungen erwähnt. Tatsächlich gibt es noch weitere Lösungen, wie beispielsweise die Verwendung fidder , einem Man-in-the-Middle-Angriff, auf den ich hier nicht näher eingehen werde.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Unterschied und Prinzipanalyse des Nginx-Forward- und Reverse-Proxy
  • Konfigurationscodebeispiel für Nginx-Forward- und Reverse-Proxy sowie Lastausgleichsfunktionen
  • Detaillierte Erläuterung zweier Möglichkeiten zur Implementierung der Sitzungspersistenz im Nginx-Reverse-Proxy
  • Implementierung der Multi-Port-Zuordnung des Nginx-Reverse-Proxys
  • Der Nginx-Reverseproxy leitet Anfragen von Port 80 an 8080 weiter.
  • Nginx Reverse-Proxy-Konfiguration entfernt Präfix
  • So stellen Sie mit Nginx mehrere Vue-Projekte unter demselben Domänennamen bereit und verwenden einen Reverse-Proxy
  • Nginx Reverse Proxy Springboot JAR-Paket-Prozessanalyse

<<:  Bei der Installation der Version MySql 8.0.16 wird die Verwendung von „UTF8B4“ anstelle von „UTF8B3“ gefordert.

>>:  Detaillierte Erläuterung des grundlegenden Implementierungsprinzips von MySQL DISTINCT

Artikel empfehlen

So installieren Sie den Apache-Dienst im Linux-Betriebssystem

Downloadlink: Betriebsumgebung CentOS 7.6 in eine...

So binden Sie einen Domänennamen an den Nginx-Dienst

Konfigurieren Sie mehrere Server in nginx.conf: B...

Beste Tools zum Erstellen und Bearbeiten von Screenshots unter Linux

Als ich mein primäres Betriebssystem von Windows ...

Beispiel einer DOM-Operationstabelle (DOM erstellt Tabelle)

1. Erstellen Sie eine Tabelle mit HTML-Tags: Code...

Detaillierte Erklärung zu anonymen Slots und benannten Slots in Vue

Inhaltsverzeichnis 1. Anonyme Slots 2. Benannte S...

Implementierung der Nginx-Domänennamenweiterleitung für den HTTPS-Zugriff

Ein Wort vorab: Plötzlich erhielt ich die Aufgabe...

Vorteile von INSERT INTO SET in MySQL

Daten in MySQL-Datenbank einfügen. Bisher häufig ...

MySQL startet langsames SQL und analysiert die Ursachen

Schritt 1. Aktivieren Sie die langsame MySQL-Abfr...

So drücken Sie relative Pfade in Linux aus

Wenn Ihr aktueller Pfad beispielsweise /var/log i...

Schnelles Verständnis des Vue-Routing-Navigationsschutzes

Inhaltsverzeichnis 1. Globale Wache 1. Globale Fr...