Heim >Backend-Entwicklung >PHP-Tutorial >Der einfachste Weg, domänenübergreifend zu erreichen: Verwenden Sie den Nginx-Reverse-Proxy

Der einfachste Weg, domänenübergreifend zu erreichen: Verwenden Sie den Nginx-Reverse-Proxy

WBOY
WBOYOriginal
2016-07-29 09:15:161092Durchsuche
Was ist domänenübergreifend?Domänenübergreifend bedeutet, dass der Browser keine Skripte von anderen Websites ausführen kann. Dies wird durch die Same-Origin-Richtlinie des Browsers verursacht, bei der es sich um eine Sicherheitsbeschränkung handelt, die der Browser für JavaScript auferlegt. Der sogenannte gleiche Ursprung bedeutet, dass der Domänenname, das Protokoll und der Port gleich sind. Wenn der Browser ein Javascript-Skript ausführt, prüft er, zu welcher Seite das Skript gehört. Wenn es sich nicht um dieselbe Ursprungsseite handelt, wird es nicht ausgeführt. Der Zweck der Same-Origin-Richtlinie besteht darin, Hacker an kriminellen Aktivitäten zu hindern. Wenn eine Bankanwendung beispielsweise Benutzern erlaubt, Webseiten ohne Same-Origin-Richtlinie hochzuladen, kann ein Hacker ein Anmeldeformular schreiben und es an seinen eigenen Server senden und erhält eine Seite, die ziemlich hochwertig aussieht. Der Hacker sendet diese Seite per E-Mail usw. an den Benutzer. Der Benutzer denkt fälschlicherweise, dass dies die Hauptwebseite einer bestimmten Bank ist und meldet sich an, wodurch seine Benutzerdaten preisgegeben werden. Und aufgrund der Same-Origin-Richtlinie des Browsers können Hacker keine Formulardaten erhalten. Mit der Popularität von RESTFUL stellen viele Anwendungen APIs mit http/https-Schnittstellen bereit und stellen externe Dienste über das XML/JSON-Format bereit, um eine offene Architektur zu erreichen. Beispielsweise bieten Websites und Anwendungen wie Weibo, WeChat, Weather Forecast und OpenStack alle erholsame Schnittstellen. Webanwendungen entwickeln sich auch in Richtung einzelner Seiten. Immer mehr Webanwendungen verfügen mittlerweile über diese Architektur: Statische einzelne WebseiteajaxRufen Sie RESTFUL ServiceWir hätten die von verschiedenen Websites bereitgestellten APIs nutzen können, um viele wunderbare Webanwendungen zu erstellen. Allerdings sind die domänenübergreifenden Einschränkungen bei der Ausführung von JavaScript durch Browser zu einem Stolperstein für diese Art offener Architektur geworden. Dieser Artikel schlägt eine einfache und effektive Möglichkeit vor, domänenübergreifende Probleme zu lösen. Häufig verwendete domänenübergreifende MethodenZu den häufig verwendeten domänenübergreifenden Methoden gehören die folgenden: 1. Verwenden Sie iFrame, um auf eine andere Domäne zuzugreifen. Lesen Sie dann den Inhalt des iFrames von einer anderen Seite. Es gibt einige Pakete für JQuery usw. Es wird gesagt, dass Firefox und andere das Lesen des Inhalts eines anderen iFrames möglicherweise nicht unterstützen. 2, jsonp. Erfordert Serverunterstützung. Verwenden Sie script src, um dynamisch einen Teil des Java-Codes abzurufen. Es handelt sich um die js-Funktion auf der Rückrufseite, und der Parameter ist ein jsonObjekt. jquery verfügt auch über eine Kapselung. 3. Legen Sie den HTTP-Header Access-Control-Allow-Origin fest: *Es heißt jedoch, dass einige Versionen von IE diesen HTTP-Header nicht erkennen. 4, Server-Proxy. Beispielsweise schreibt der Server eine URL-Verarbeitungsaktion. Sein Parameter ist eine URL. Dieser Server verwendet Parameter, um eine URL zusammenzusetzen, verwendet die httpclient-Bibliothek, um die URL auszuführen, und gibt dann den gelesenen Inhalt an den http-Client aus. Nginx Reverse Proxy realisiert domänenübergreifendDie oben genannten domänenübergreifenden Methoden weisen alle einige Probleme auf. Einige können nicht alle Browser unterstützen, andere müssen den Javascript-Code ändern und andere müssen den serverseitigen Code neu schreiben. Einige können in Szenarien wie Sitzungen Probleme haben. Tatsächlich ist die Verwendung des Nginx-Reverse-Proxys zum Erreichen einer domänenübergreifenden Methode die einfachste domänenübergreifende Methode. Sie müssen nur die Konfiguration von Nginx ändern, um domänenübergreifende Probleme zu lösen. Es unterstützt alle Browser und Sitzungen, muss keinen Code ändern und hat keinen Einfluss auf die Serverleistung. Wir müssen nur Nginx konfigurieren und mehrere Präfixe auf einem Server konfigurieren, um http/https-Anfragen an mehrere echte Server weiterzuleiten. Auf diese Weise haben alle URLs auf diesem Server denselben Domänennamen, dasselbe Protokoll und denselben Port. Daher haben diese URLs für Browser denselben Ursprung und es gibt keine domänenübergreifenden Einschränkungen. Und in Wirklichkeit werden diese URLs tatsächlich von physischen Servern bereitgestellt. Das Javascript innerhalb dieser Server kann URLs auf allen diesen Servern domänenübergreifend aufrufen. Nachfolgend finden Sie zur detaillierten Erläuterung ein Beispiel für die domänenübergreifende Unterstützung von Nginx. Zum Beispiel haben wir zwei von Pythonflask entwickelte Projekte: testFlask1 und testFlask2. Das Javascript-Skript im testFlask2-Projekt muss eine URL von testFlask1 über die Methode ajax aufrufen, um einige Daten zu erhalten. Unter normalen Bereitstellungsbedingungen kommt es zu domänenübergreifenden Problemen und der Browser weigert sich, Aufrufe wie die folgenden auszuführen.

1

2

3

4

5

$("button").click(function() {

    $.get("127.0.0.1:8081/partners/json", function(result) {

        $("div").html(result);

    });

});

Ändern wir die Javascript-Datei des testFlask2-Projekts. Auf diese Weise treten keine domänenübergreifenden Probleme beim Zugriff auf URLs desselben Ursprungs auf.

1

2

3

4

5

$("button").click(function() {

    $.get("partners/json", function(result) {

        $("div").html(result);

    });

});

Allerdings hat unser testFlask2-Projekt eigentlich keine URL wie „partners/json“, also wie geht man damit um? Wir schreiben die Nginx-Konfigurationsdatei wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

server{

  listen8000;

  location/ {

    includeuwsgi_params;

    uwsgi_passunix:/tmp/testFlask2.sock;

  }

  location/partners {

    rewrite^.+partners/?(.*)$ / break;

    includeuwsgi_params;

    uwsgi_passunix:/tmp/testFlask1.sock;

  }

}

Wir stellen das testFlask2-Projekt im Stammverzeichnis von Port 8080 bereit. Stellen Sie das testFlask1-Projekt bereit, das Webdienste im Verzeichnis /partners bereitstellt. Aber unser testFlask1-Projekt kann keine URL-Anfragen wie /partners/json verarbeiten. Was zu tun? Durch rewrite^.+partners/?(.*)$ /$1 break; mit diesem Befehl kann nginx alle empfangenen /partners/*-Anfragen in /*-Anfragen umwandeln und sie dann an den Backend-Real-Webserver weiterleiten . Auf diese Weise kann das ajax-Clientprogramm von RESTFUL die von jedem Server bereitgestellte RESTFUL-Schnittstelle aufrufen, indem es der URL nur ein bestimmtes Präfix angibt. Sogar über den Reverse-Proxy von Nginx können wir die RESTFUL-Schnittstelle aufrufen, die von Websites bereitgestellt wird, die von anderen Unternehmen entwickelt wurden. Zum Beispiel

1

2

3

4

5

location/sohu {

  rewrite^.+sohu/?(.*)$ / break;

  includeincludeuwsgi_params;uwsgi_params;

  proxy_passhttp://www.sohu.com/;

}

Wir werden die gesamte Sohu-Website in unser 8080:/sohu/-Verzeichnis verschieben, unser Javascript kann seinen RESTFUL-Dienst frei aufrufen. Übrigens, rewrite^.+sohu/?(.*)$ /$1 break; In diesem Befehl stellt $1 den Teil (.*) dar. Die Parameter im ersten Paar () sind $1, die Parameter im zweiten Paar () sind $2 und so weiter. ZusammenfassungIn diesem Artikel wird erläutert, wie Sie die Reverse-Proxy-Funktion von Nginx verwenden, um domänenübergreifenden Zugriff auf jede Anwendung und Website zu erreichen. nginx ist ein Hochleistungs-Webserver, der häufig als Reverse-Proxy-Server verwendet wird. Als Reverse-Proxy-Server leitet Nginx HTTP-Anfragen an einen oder mehrere Server weiter. Der domänenübergreifende Zugriff kann durch die Zuordnung eines lokalen URL-Präfixes zum Webserver erreicht werden, auf den domänenübergreifend zugegriffen werden soll. Für den Browser greifen Sie auf eine URL auf demselben Ursprungsserver zu. Und Nginx leitet die HTTP-Anfrage an den dahinter liegenden realen physischen Server weiter, indem es das URL-Präfix erkennt. Und entfernen Sie das Präfix mit dem Rewrite-Befehl. Auf diese Weise kann der reale Server die Anfrage korrekt verarbeiten und weiß nicht, dass die Anfrage vom Proxyserver stammt. Einfach ausgedrückt täuscht der Nginx-Server den Browser vor, es handele sich um einen Aufruf mit demselben Ursprung, und löst so das domänenübergreifende Problem des Browsers. Durch das Umschreiben der URL wird dem echten Server vorgetäuscht, dass die HTTP-Anfrage direkt vom Browser des Benutzers kommt. Auf diese Weise müssen Sie zur Lösung des domänenübergreifenden Problems nur die Nginx-Konfigurationsdatei ändern. Einfach, leistungsstark und effizient!

Das Obige stellt die einfachste Methode zum Erreichen einer domänenübergreifenden Implementierung vor: Die Verwendung des Nginx-Reverse-Proxys, einschließlich einiger Aspekte des Inhalts, wird hoffentlich für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Verwendung von MerkmalenNächster Artikel:Verwendung von Merkmalen