Eine universelle Nginx-Schnittstelle zur Implementierung der Reverse-Proxy-Konfiguration

Eine universelle Nginx-Schnittstelle zur Implementierung der Reverse-Proxy-Konfiguration

1. Was ist ein Proxyserver?

Proxyserver: Wenn der Client eine Anforderung sendet, sendet er sie nicht direkt an den Zielhost, sondern zuerst an den Proxyserver. Nachdem der Proxydienst die Anforderung des Clients akzeptiert hat, sendet er sie an den Host, empfängt die vom Zielhost zurückgegebenen Daten, speichert sie auf der Festplatte des Proxyservers und sendet sie dann an den Client.

2. Warum einen Proxyserver verwenden?

1) Verbessern Sie die Zugriffsgeschwindigkeit

Da die vom Zielhost zurückgegebenen Daten auf der Festplatte des Proxyservers gespeichert werden, werden sie beim nächsten Zugriff des Clients auf dieselben Site-Daten direkt von der Festplatte des Proxyservers gelesen, der eine Caching-Funktion hat. Insbesondere bei beliebten Sites kann dies die Anforderungsgeschwindigkeit erheblich verbessern.

2) Firewall-Funktion

Da alle Clientanforderungen für den Zugriff auf die Remotesite über den Proxyserver laufen müssen, können Sie Beschränkungen für den Proxyserver festlegen, um bestimmte unsichere Informationen herauszufiltern.

3) Zugriff auf unzugängliche Zielseiten über Proxyserver

Im Internet wurden viele Proxyserver entwickelt. Wenn der Zugriff des Clients eingeschränkt ist, kann er über einen uneingeschränkten Proxyserver auf die Zielsite zugreifen. Einfach ausgedrückt: Der Browser, den wir zum Umgehen der Firewall verwenden, verwendet den Proxyserver. Obwohl wir nicht ins Ausland gehen können, können wir auch direkt auf das externe Netzwerk zugreifen.

Reverse-Proxy vs. Forward-Proxy

1. Was ist ein Forwardproxy? Was ist ein Reverse-Proxy?

Ein Forwardproxy wird zwischen dem Client und dem Zielhost eingerichtet und dient nur dazu, die Verbindungsanfragen vom internen Netzwerk zum Internet weiterzuleiten. Der Client muss einen Proxyserver angeben und die HTTP-Anfragen, die ursprünglich direkt an den Webserver gesendet wurden, an den Proxyserver senden.

Der Reverse-Proxy-Server wird serverseitig eingerichtet. Er entlastet den Server, indem er häufig aufgerufene Seiten zwischenspeichert und Client-Anfragen an den Zielserver im internen Netzwerk weiterleitet. Außerdem gibt er die vom Server erhaltenen Ergebnisse an den Client zurück, der eine Verbindung im Internet anfordert. Zu diesem Zeitpunkt erscheinen der Proxy-Server und der Zielhost für die Außenwelt als ein einziger Server.

2. Was sind die Hauptanwendungen eines Reverse-Proxys?

Viele große Websites verwenden mittlerweile Reverse-Proxys. Neben der Verhinderung böswilliger Angriffe auf interne Server aus dem externen Netzwerk, der Zwischenspeicherung zur Reduzierung der Serverbelastung und der Zugriffssicherheitskontrolle kann es auch einen Lastenausgleich durchführen und Benutzeranforderungen auf mehrere Server verteilen.

Für einen Frontend-Entwickler ist das Debuggen der Schnittstelle und das jedes Malige Senden des Codes an den Testserver eine sehr zeitaufwändige und mühsame Aufgabe.

Um die Effizienz zu verbessern, wurde zur Lösung dieses Problems der Reverse-Proxy von Nginx verwendet.

Schnittstellenadresse:
test.com

Besuchen Sie die URL:
lokaler Host

Das Kernproblem besteht darin, dass beim Einloggen keine Cookies geschrieben werden können. Um dieses Problem zu lösen, haben wir viele Umwege gemacht.

Arbeiterprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 10;
  Server {
    hören Sie 80;
    Servername localhost;
    
    Standort =/ {
      add_header X-Frame-Optionen SAMEORIGIN;
      Stammverzeichnis D:/Arbeitsbereich/;
      Index Index.html;
    }

    Standort ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|swf|woff|woff2|ttf|json|svg|cur|vue|otf|eot)$ {
      Zeichensatz UTF-8;
      Stammverzeichnis D:/Arbeitsbereich/;
      läuft in 3 Tagen ab;
    }
    
    Standort = /socket/v2 {
      Proxy-Passwort http://test.com;
      Proxy_Redirect aus;
      Proxy_http_Version 1.1;
      Proxy_Set_Header-Upgrade $http_upgrade;
      proxy_set_header Verbindung "Upgrade";
      Proxy_set_header Host test.com;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_Verbindungstimeout 30;
      Proxy_Sendezeitüberschreitung 30;
      Proxy_Lese_Timeout 60;
      Proxy-Puffergröße 256k;
      Proxy-Puffer 4 256 k;
    }
    
    Standort / {
      Proxy-Passwort http://test.com;
      Proxy_Set_Header Cookie $http_cookie;
      Proxy-Cookie-Domäne test.com localhost;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_set_header Host test.com;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
    }
  }
}

Der Kerncode besteht aus drei Codezeilen:

Proxy_Set_Header Cookie $http_cookie;
Proxy-Cookie-Domäne test.com localhost;
Proxy_set_header Host test.com;

Ich habe nur eine vage Vorstellung von der konkreten Erklärung:

  • Die erste ist, Kekse zu tragen,
  • Die zweite Domain, die das Cookie setzt
  • Der dritte legt den tatsächlichen Host fest

Wichtiger Hinweis: Kehren Sie die Reihenfolge der oben genannten 3 nicht um, sonst schlägt der Proxy fehl und ich weiß nicht, warum.

Wie debuggt man auf einem Mobiltelefon?

Es ist nicht möglich, über ein Mobiltelefon direkt auf localhost zuzugreifen. Sie können das Mobiltelefon und den Computer mit demselben Netzwerksegment verbinden und die IP des Computers verwenden, um darauf zuzugreifen.
Allerdings wird hier nur der lokale Host geproxied, nicht die IP des Rechners

Daher müssen Sie den Server{...} oben kopieren und einfach alle darin enthaltenen lokalen Hosts in die IP-Adresse Ihres Computers ändern. Der endgültige Code lautet:

Arbeiterprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 10;
  Server {
    hören Sie 80;
    Servername localhost;
    
    Standort =/ {
      add_header X-Frame-Optionen SAMEORIGIN;
      Stammverzeichnis D:/Arbeitsbereich/;
      Index Index.html;
    }

    Standort ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|swf|woff|woff2|ttf|json|svg|cur|vue|otf|eot)$ {
      Zeichensatz UTF-8;
      Stammverzeichnis D:/Arbeitsbereich/;
      läuft in 3 Tagen ab;
    }
    
    Standort = /socket/v2 {
      Proxy-Passwort http://test.com;
      Proxy_Redirect aus;
      Proxy_http_Version 1.1;
      Proxy_Set_Header-Upgrade $http_upgrade;
      proxy_set_header Verbindung "Upgrade";
      Proxy_set_header Host test.com;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_Verbindungstimeout 30;
      Proxy_Sendezeitüberschreitung 30;
      Proxy_Lese_Timeout 60;
      Proxy-Puffergröße 256k;
      Proxy-Puffer 4 256 k;
    }
    
    Standort / {
      Proxy-Passwort http://test.com;
      Proxy_Set_Header Cookie $http_cookie;
      Proxy-Cookie-Domäne test.com localhost;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_set_header Host test.com;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
    }
  }
  Server {
    hören Sie 8080;
    Servername xx.xx.xx.xx;
    
    Standort =/ {
      add_header X-Frame-Optionen SAMEORIGIN;
      Stammverzeichnis D:/Arbeitsbereich/;
      Index Index.html;
    }

    Standort ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|swf|woff|woff2|ttf|json|svg|cur|vue|otf|eot)$ {
      Zeichensatz UTF-8;
      Stammverzeichnis D:/Arbeitsbereich/;
      läuft in 3 Tagen ab;
    }
    
    Standort = /socket/v2 {
      Proxy-Passwort http://test.com;
      Proxy_Redirect aus;
      Proxy_http_Version 1.1;
      Proxy_Set_Header-Upgrade $http_upgrade;
      proxy_set_header Verbindung "Upgrade";
      Proxy_set_header Host test.com;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_Verbindungstimeout 30;
      Proxy_Sendezeitüberschreitung 30;
      Proxy_Lese_Timeout 60;
      Proxy-Puffergröße 256k;
      Proxy-Puffer 4 256 k;
    }
    
    Standort / {
      Proxy-Passwort http://test.com;
      Proxy_Set_Header Cookie $http_cookie;
      Proxy-Cookie-Domäne test.com xx.xx.xx.xx;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_set_header Host test.com;
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
    }
  }
}

Zugriffsmethode: http://xx.xx.xx.xx:8080

Wenn die Konfiguration vom Verpackungstool generiert wird, können Sie nodejs verwenden, um die IP-Adresse Ihres Computers dynamisch abzurufen

Funktion getIPAdress() {   
  var Schnittstellen = require('os').networkInterfaces();   
  für (var devName in Schnittstellen) {      
    var iface = Schnittstellen[Gerätename];      
    für (var i = 0; i < iface.length; i++) {         
      var alias = iface[i];         
      wenn (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {            
        Aliasadresse zurückgeben;
      }      
    }   
  } 
}

Hier ist ein Tool zum dynamischen Generieren von nginx.config

Funktion buildNginxConfig(config) {

  Funktion getIPAdress() {   
    var Schnittstellen = require('os').networkInterfaces();   
    für (var devName in Schnittstellen) {      
      var iface = Schnittstellen[Gerätename];      
      für (var i = 0; i < iface.length; i++) {         
        var alias = iface[i];         
        wenn (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {            
          Aliasadresse zurückgeben;         
        }      
      }   
    } 
  }
  var cwd = process.cwd().replace(/\\/g, '/') + '/app';
  var Protokoll = /https|443/.test(config.ip) ? 'https' : 'http';

  var Server = [{
    Browser-IP: "localhost",
    Hafen: 80,
    Wurzel: cwd,
    Server-IP: config.ip,
    Protokoll: Protokoll,
  }, {
    Browser-IP: getIPAdress(),
    Port: 8080,
    Wurzel: cwd,
    Server-IP: config.ip,
    Protokoll: Protokoll,
  }].map(Funktion(Element) {
    Rückkehr `
  Server {
    hören Sie ${item.port};
    Servername ${item.browserIp};
    
    Standort =/ {
      add_header X-Frame-Optionen SAMEORIGIN;
      Wurzel ${item.root};
      Index Index.html;
    }

    Standort ~* \\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|swf|woff|woff2|ttf|json|svg|cur|vue|otf|eot)$ {
      Zeichensatz UTF-8;
      Wurzel ${item.root};
      läuft in 3 Tagen ab;
    }
    
    Standort = /socket/v2 {
      Proxy-Passwort ${item.protocol}://${item.serverIp};
      Proxy_Redirect aus;
      Proxy_http_Version 1.1;
      Proxy_Set_Header-Upgrade $http_upgrade;
      proxy_set_header Verbindung "Upgrade";
      Proxy_set_header Host ${item.serverIp};
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_Verbindungstimeout 30;
      Proxy_Sendezeitüberschreitung 30;
      Proxy_Lese_Timeout 60;
      Proxy-Puffergröße 256k;
      Proxy-Puffer 4 256 k;
    }
    
    Standort / {
      Proxy-Passwort ${item.protocol}://${item.serverIp};
      Proxy_Set_Header Cookie $http_cookie;
      Proxy-Cookie-Domäne ${item.serverIp} ${item.browserIp};
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_set_header Host ${item.serverIp};
      Proxy_Set_Header X-Real-IP $Remote_Addr;
      Proxy_Set_Header REMOTE-HOST $remote_addr;
    }
  }`;
  }).join('\n');
  var str = `Arbeitsprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 10;
  ${servers}
}`;

  gibt str zurück;
}

Exporte = Modul.Exporte = BuildNginxConfig;

Mit diesem universellen Reverse-Proxy können Sie nach Belieben mit jeder Website-Oberfläche spielen.

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:
  • Verwenden des Nginx-Forward-Proxys zur Implementierung einer Analyse des Intranet-Domänennamen-Weiterleitungsprozesses
  • Diagramm des Prozesses zur Implementierung eines Richtungsproxys durch Nginx
  • Unterschied und Prinzipanalyse des Nginx-Forward- und Reverse-Proxy
  • Detaillierte Erläuterung des Nginx-Forward-Proxys und des Reverse-Proxys
  • Interviewfragen zu Forwardproxy und Reverseproxy in verteilter Architektur

<<:  Centos7 installiert mysql5.6.29 Shell-Skript

>>:  js, um eine einfache Produkt-Screening-Funktion zu erreichen

Artikel empfehlen

Webdesign-Tutorial (6): Behalte deine Leidenschaft für Design

<br />Vorheriger Artikel: Webdesign-Tutorial...

Die Darstellung und Öffnungsmethode eines Hyperlinks

<br />Verwandte Artikel: So rufen Sie einen ...

JavaScript-OffsetParent-Fallstudie

1. Definition von offsetParent: offsetParent ist ...

Schritte zur Installation von GRUB auf einem Linux-Server

So installieren Sie GRUB für Linux Server Sie kön...

Informationen zum CSS-Floating und zum Aufheben des Floatings

Definition von Float Setzt das Element aus dem no...

js implementiert einen einfachen Countdown

In diesem Artikelbeispiel wird der spezifische Co...

Eine kurze Diskussion über JS-Verpackungsobjekte

Inhaltsverzeichnis Überblick Definition Instanzme...

VUE + OPENLAYERS erreicht Echtzeit-Positionierungsfunktion

Inhaltsverzeichnis Vorwort 1. Etikettenstil defin...

Über nginx zur Implementierung des Jira-Reverse-Proxys

Zusammenfassung: Nginx-Reverse-Proxy für JIRA kon...

Detailliertes Tutorial zur Überwachung von Nginx/Tomcat/MySQL mit Zabbix

Inhaltsverzeichnis Zabbix überwacht Nginx Zabbix ...