Wenn wir nginx als Proxy-Server verwenden, müssen wir manchmal für verschiedene Anfragen unterschiedliche Verarbeitungen vornehmen, z. B. unterscheiden, ob es sich um eine http-Anfrage oder einen Port-Proxy handelt. Wie erreicht nginx also diese Unterscheidung? Im Folgenden erkläre ich im Detail, wie nginx zwischen http- und Port-Proxys unterscheiden kann.
Konfigurieren des Server-Blocks
Zunächst muss der Server-Block in der nginx-Konfigurationsdatei so konfiguriert werden, dass er zwischen http-Anfragen und Port-Proxys unterscheidet. Hier ist ein einfaches Beispiel:
"nginx
Server {
hören 80.
server_name example.com.
Standort / {
proxy_pass http://backend.
}
}
Server {
8080 hören;
server_name example.com.
Standort / {
proxy_pass http://backend:8080.
}
}
“`
In der obigen Konfiguration haben wir zwei Serverblöcke konfiguriert, die auf den Ports 80 und 8080 lauschen. Wenn eine Anforderung an Port 80 eingeht, leitet nginx die Anforderung an http://backend weiter; wenn eine Anforderung an Port 8080 eingeht, leitet nginx die Anforderung an http://backend:8080 weiter.
Verwendung des Kartenmoduls
Zusätzlich zur Konfiguration des Server-Blocks können wir auch das nginx-Map-Modul verwenden, um zwischen http-Anfragen und Port-Proxies zu unterscheiden. Das Map-Modul kann verwendet werden, um eine Variable auf der Grundlage ihres Wertes auf einen anderen Wert abzubilden und so eine andere Verarbeitungslogik zu ermöglichen.
Hier ist ein Beispiel für die Verwendung des Kartenmoduls:
"nginx
http {
map $server_port $backend {
Standard-Backend.
8080 backend:8080.
}
Server {
hören 80.
server_name example.com.
Standort / {
proxy_pass http://$backend.
}
}
}
“`
In der obigen Konfiguration haben wir das map-Modul verwendet, um verschiedene $backend-Werte basierend auf dem Wert von $server_port zuzuordnen. Wenn $server_port gleich 80 ist, ist der Wert von $backend gleich backend; wenn $server_port gleich 8080 ist, ist der Wert von $backend gleich backend:8080. damit wird die Funktion der Unterscheidung zwischen http-Anfragen und Port-Proxys erreicht.
Verwendung von bedingten if-Anweisungen
Zusätzlich zum Map-Modul können wir auch die if-Bedingungsanweisung von Nginx verwenden, um zwischen http-Anfragen und Port-Proxys zu unterscheiden. if-Bedingungsanweisungen können je nach Bedingungen unterschiedliche Verarbeitungslogiken ausführen.
Es folgt ein Beispiel für die Verwendung einer bedingten if-Anweisung:
"nginx
Server {
hören 80.
server_name example.com.
Standort / {
if ($server_port = 8080) {
proxy_pass http://backend:8080.
Pause;
}
proxy_pass http://backend.
}
}
“`
In der obigen Konfiguration verwenden wir die bedingte Anweisung if, um festzustellen, ob der Wert von $server_port 8080 ist. Ist dies der Fall, wird die Anfrage an http://backend:8080 weitergeleitet, andernfalls an http://backend. Auf diese Weise können wir auch zwischen der http-Anfrage und dem Port-Proxying unterscheiden Funktion.
Zusammenfassungen
Durch die obige Einführung können wir sehen, dass nginx eine Vielzahl von Möglichkeiten hat, um die Funktion der Unterscheidung zwischen http-Anfragen und Port-Proxies zu erreichen, wie z. B. die Konfiguration von Server-Blöcken, die Verwendung des Map-Moduls, die Verwendung von bedingten if-Anweisungen und so weiter. Verschiedene Wege sind für verschiedene Szenarien anwendbar, wir können den geeigneten Weg wählen, um die Funktion der Unterscheidung zwischen http-Anfragen und Port-Proxys entsprechend den tatsächlichen Bedürfnissen zu erreichen.
Ich hoffe, die obigen Ausführungen sind hilfreich, und wenn Sie weitere Fragen haben, können Sie gerne einen Kommentar hinterlassen.