Praktische Erfahrung mit der Implementierung von Nginx zum Weiterleiten von Anfragen basierend auf URLs

Praktische Erfahrung mit der Implementierung von Nginx zum Weiterleiten von Anfragen basierend auf URLs

Vorwort

Weil dies ein verteiltes Dateisystem ist, das extern im Intranet bereitgestellt wurde und FastDFS verwendet. Die Anwendung wird auf Port 8088 bereitgestellt und ihr Backend-Verwaltungssystem wird auf Port 8089 bereitgestellt (auf demselben Intranet-Server). Der Dienst des Backend-Verwaltungssystems muss den FastDFS-Dienst anfordern, der direkt angefordert werden kann (Ressourcen desselben Servers). Wir haben jedoch nur das Backend-Verwaltungssystem (Springboot-Projekt) extern bereitgestellt und können nur auf das Backend-Verwaltungssystem zugreifen, ohne die vom öffentlichen Netzwerk zugewiesene IP zu verwenden. Um direkt auf die Schnittstelle des FastDFS-Dienstes zuzugreifen, müssen Sie eine Verbindung zum öffentlichen Netzwerk des Servers herstellen, aber dies schränkt den Zugriff unserer Benutzer ein (ich kann nicht jedes Mal auf Ihren Server gehen, um darauf zuzugreifen, ich denke, ich kann von anderen Orten aus darauf zugreifen).

Proxyserver: SockerServer hört einen Port ab, stellt gemäß der http-Nachricht eine Verbindung zum angegebenen Server-Port her und stellt Datenanforderungen
HTTP-Proxy
Die HTTP-Anforderung wird über den Proxyserver geleitet, und der Proxyserver ist nur für die Weiterleitung des entsprechenden HTTP-Antworttexts verantwortlich.
HTTPS-Proxy
Wenn eine HTTPS-Anfrage den Proxyserver durchläuft, wird eine CONNECT-Nachricht gesendet, um einen Tunnel mit dem Proxyserver herzustellen. Wenn der Proxyserver HTTP 200 zurückgibt, wurde der Tunnel erfolgreich hergestellt. Der nachfolgende Proxyserver muss nur für die Weiterleitung der Daten verantwortlich sein. Tatsächlich findet der SSL/TLS-Handshake immer noch zwischen dem Client und dem realen Server statt.

ProxyServlet

Da der Backend-Projektport 8089 auf den FastDFS-Dienst des Servers zugreifen kann, besteht mein erster Gedanke darin, Springboots ProxyServlet zu verwenden, um die angegebene Anforderung an den Serverport 8088 weiterzuleiten

Das Hauptservlet von Spring Boot ist das DispatcherServlet von SpringMVC und sein Standard-URL-Muster ist "/". Wenn wir einer bestimmten URL verschiedene Aufrufe (andere Serverschnittstellen) hinzufügen möchten, müssen wir ein neues Proxy-Servlet erstellen, das ServletRegistrationBean verwendet, ein neues ProxyServlet erstellt, um das Abhören und Senden von Daten verschiedener Ports zu handhaben, und es beim von Spring Boot verwalteten ServletContext registrieren (den angegebenen Server und Port festlegen und die Schnittstelle zur Weiterleitung anfordern).

verlassen

<Abhängigkeit>
 <groupId>org.mitre.dsmiley.httpproxy</groupId>
 <artifactId>smiley-http-proxy-servlet</artifactId>
 <version>1.7</version>
 </Abhängigkeit>

Konfiguration

### Konfigurieren Sie den Proxy# Bei der Anforderung einer Ressource leitet der Proxy an Port 8088 im Projekt weiter proxy.test.servlet_url_one= /resource/*
proxy.test.target_url_one= https://localhost:8088
@Komponente
@Daten
öffentliche Klasse ProxyFilterServlet {
 @Wert("${proxy.test.target_url_one}")
 privater String Ziel-URL;
 @Wert("${proxy.test.servlet_url_one}")
 privater String ServletUrl;
}

Ändern Sie die Konfiguration, um hinzuzufügen

@Konfiguration
öffentliche Klasse ProxyServletConfig {
 @Autowired
 privates ProxyFilterServlet ProxyFilterServlet;
 //Mehrere Proxy-Servlets können mehrere Beans konfigurieren
 @Bohne
 öffentliche ServletRegistrationBean servletRegistrationBean(){
 ServletRegistrationBean servletRegistrationBean = neue ServletRegistrationBean(neuer ProxyServlet(), proxyFilterServlet.getServletUrl());
 //Dieser SetName muss festgelegt werden. Wenn es mehrere gibt, müssen die Namen unterschiedlich sein. servletRegistrationBean.setName("go_backend");
 servletRegistrationBean.addInitParameter("targetUri", proxyFilterServlet.getTargetUrl());
 servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
 gibt ServletRegistrationBean zurück;
 }
}

Stellen Sie über den Servlet-Container eine Verbindung zum Zielserver her. Schließlich ist es nicht so leistungsstark wie ein professioneller Proxyserver wie nginx.

nginx – Proxy-Weiterleitung

  • Zu diesem Zeitpunkt dachte ich daran, zwischen den Servern eine Nginx-Schicht hinzuzufügen, um verschiedene Serviceanforderungen zur Verarbeitung an verschiedene Port-APIs weiterzuleiten.

Übertragen Sie die externe Netzwerkanforderung an denselben Intranet-Port des Servers

Server {
 hören Sie 80;
 Servername 127.0.0.1;
 
 Standort / {
 Proxy-Passwort http://127.0.0.1:3000;
 }
 
 Standort ~ /api/ {
 Proxy-Passwort http://172.30.1.123:8081;
 }
}

Referenz-Blogbeitrag:

https://www.jb51.net/article/174382.htm

https://www.jb51.net/article/174383.htm

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So verwenden Sie nginx, um bestimmte URL-Anfragen durch reguläre Ausdrücke abzufangen
  • So verwenden Sie nginx, um eine angegebene Schnittstelle (URL) zu blockieren
  • Nginx leitet dynamisch an Upstream weiter, entsprechend dem Pfad in der URL
  • Einführung in den Unterschied zwischen dem Hinzufügen oder Nicht-Hinzufügen von / nach der URL in der Reverse-Proxy-Konfiguration von nginx proxy_pass
  • Lösung für das Problem, dass unter Nginx keine chinesischen URLs verwendet werden können
  • Detaillierte Erläuterung der Nginx-Konfiguration URL-Umleitung-Reverse-Proxy
  • Detaillierte Erläuterung des Nginx-Umschreibens und der Lokalisierung gemäß URL-Parametern
  • So richten Sie einen URL-Link im Nginx-Server ein

<<:  Wird der Index durch MySQL ungültig?

>>:  Detaillierte Erläuterung der Implementierungsprinzipien von call, apply und bind in JavaScript

Artikel empfehlen

Auswahl der Groß-/Kleinschreibung von MySQL-Tabellennamen

Inhaltsverzeichnis 1. Parameter, die die Groß-/Kl...

Detaillierte Erläuterung der Deep Copy und Shallow Copy im JS-Variablenspeicher

Inhaltsverzeichnis Variabler Typ und Speicherplat...

Zusammenfassung der Entwicklung benutzerdefinierter Vue 3-Richtlinien

Was ist eine Richtlinie? Sowohl Angular als auch ...

Das vergessene Button-Tag

Hinweis: Dieser Artikel wurde von jemand anderem ü...

Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL

Detailliertes Beispiel zum Beheben der Tablespace...

MySQL 8.0.16 Installations- und Konfigurations-Tutorial unter Windows 10

In diesem Artikel finden Sie das grafische Tutori...

Lombok-Implementierung JSR-269

Vorwort Einführung Lombok ist ein praktisches Too...

So fügen Sie eine Festplatte in Vmware hinzu: Erweitern Sie die Festplatte

In diesem Artikel wird beschrieben, wie Sie eine ...

Verwenden Sie PSSH zur Stapelverwaltung von Linux-Servern

pssh ist eine in Python implementierte Open-Sourc...

Detaillierte Erläuterung der 6 Möglichkeiten der JS-Vererbung

Vererbung von Prototypketten Die Prototypenvererb...

Seitenlayout für Bootstrap 3.0-Lernnotizen

Dieses Mal werden wir hauptsächlich etwas über da...

Detaillierte Erläuterung der sechs gängigen Einschränkungstypen in MySQL

Inhaltsverzeichnis Vorwort 1.nichtnull 2. einziga...