ホームページ バックエンド開発 PHPチュートリアル クロスドメインを実現する最も簡単な方法: nginx リバース プロキシを使用する

クロスドメインを実現する最も簡単な方法: nginx リバース プロキシを使用する

Jul 29, 2016 am 09:15 AM
nbsp nginx quot url

クロスドメインとは何ですか? クロスドメインとは、ブラウザが他の Web サイトからのスクリプトを実行できないことを意味します。これは、ブラウザの同一生成元ポリシー (JavaScript に対してブラウザによって課されるセキュリティ制限) が原因で発生します。 いわゆる同一オリジンとは、ドメイン名、プロトコル、ポートが同じであることを意味します。ブラウザは JavaScript スクリプトを実行するときに、そのスクリプトがどのページに属しているかをチェックし、同じオリジンのページでない場合は実行されません。 同一生成元ポリシーの目的は、ハッカーによる犯罪行為を防ぐことです。たとえば、銀行アプリケーションでユーザーが Web ページをアップロードできる場合、同一生成元ポリシーがなければ、ハッカーはログイン フォームを作成して自分のサーバーに送信し、非常にハイエンドに見えるページを取得できます。ハッカーはこのページを電子メールなどでユーザーに送信します。ユーザーはこれをある銀行のメインページと誤ってログインし、ユーザーデータが漏洩します。また、ブラウザーの同一生成元ポリシーにより、ハッカーはフォーム データを受信できません。 現在、RESTFULの人気により、多くのアプリケーションがhttp/httpsインターフェイスを備えたAPIを提供し、xml/json形式を通じて外部にサービスを提供して、オープンアーキテクチャを実現しています。たとえば、Weibo、WeChat、天気予報、OpenStack などの Web サイトやアプリケーションはすべて、Restful インターフェイスを提供します。 Web アプリケーションも単一ページに向けて開発されています。 現在、このアーキテクチャを採用する Web アプリケーションが増えています: 静的な単一 Web ページajaxCallRESTFUL サービス さまざまな Web サイトによって提供される API を使用して、多くの素晴らしい Web アプリケーションを作成することもできます。ただし、ブラウザーが JavaScript を実行するときのクロスドメイン制限が、このタイプのオープン アーキテクチャの障害となっています。 この記事では、クロスドメインの問題を解決するためのシンプルかつ効果的な方法を提案します。 一般的に使用されるクロスドメイン方法 一般的に使用されるクロスドメイン方法には次のものがあります: 1. iFrame を使用して別のドメインにアクセスします。次に、別のページから iFrame のコンテンツを読み取ります。 jqueryなどのパッケージもいくつかあります。 Firefoxなどは別のiFrameのコンテンツの読み込みをサポートしていない可能性があると言われています。 2、jsonp。サーバーのサポートが必要です。スクリプト src を使用して Java コードを動的に取得します。これはコールバック ページのjs 関数 であり、パラメータは json オブジェクト です。 jquery にはカプセル化もあります。 3. http ヘッダー、Access-Control-Allow-Origin を設定します: *ただし、IE の一部のバージョンでは、この http ヘッダーが認識されないと言われています。 4、サーバープロキシ。たとえば、サーバーは URL 処理アクションを書き込みます。そのパラメータは URL です。このサーバーはパラメータを使用して URL を結合し、httpclient ライブラリを使用して URL を実行し、読み取ったコンテンツを http クライアントに出力します。 nginxリバースプロキシでクロスドメインを実現上記のクロスドメイン手法にはすべて、いくつかの問題があります。すべてのブラウザをサポートできないもの、JavaScript コードを変更する必要があるもの、サーバー側のコードを書き直す必要があるものがあります。セッションなどのシナリオで問題が発生する場合があります。 実際、nginx リバース プロキシを使用してクロスドメインを実現するのは、最も簡単なクロスドメイン方法です。クロスドメインの問題を解決するには、nginx の構成を変更するだけで済みます。nginx はすべてのブラウザーとセッションをサポートしており、コードを変更する必要はなく、サーバーのパフォーマンスには影響しません。 http/https リクエストを複数の実サーバーに転送するには、nginx を設定し、1 つのサーバー上で複数のプレフィックスを設定するだけです。このようにして、このサーバー上のすべての URL は同じドメイン名、プロトコル、およびポートを持ちます。したがって、ブラウザーの場合、これらの URL は同じ起源のものであり、クロスドメインの制限はありません。そして実際には、これらの URL は物理サーバーによって提供されています。これらのサーバー内の JavaScript は、ドメイン全体でこれらすべてのサーバー上の URL を呼び出すことができます。 以下に、クロスドメインをサポートする nginx の例を示し、詳細な説明を行います。 たとえば、pythonflask で開発された 2 つのプロジェクト、testFlask1 と testFlask2 があります。 testFlask2 プロジェクトの JavaScript スクリプトは、データを取得するために ajax を介して testFlask1 の URL を呼び出す必要があります。 通常の展開では、クロスドメインの問題が発生し、ブラウザは次のような呼び出しの実行を拒否します。

1

2

3

4

5

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

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

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

(result) {🎜🎜🎜🎜 🎜🎜$(🎜 });    });

});

});
🎜testFlask2プロジェクトのjavascripファイルを変更してみましょう。こうすることで、同じオリジンから URL にアクセスするときにクロスドメインの問題は発生しません。

1

2

3

4

5

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

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

(結果) {🎜🎜

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

});    });

});

});
🎜しかし、実際にはtestFlask2プロジェクトにはpartners/jsonのようなURLがないので、どう対処すればよいでしょうか? 次のように nginx 設定ファイルを書きます: 1

2

3

4

5

6

7

8

9

10

11

12

サーバー{

server{

  listen8000;

  

listen8000;    includeuwsgi_params;

    uwsgi_passunix:/tmp/testFlask2.sock;

🎜🎜 🎜🎜場所/ {🎜🎜🎜🎜 🎜🎜インクルードuwsgi_params;🎜🎜🎜🎜 🎜🎜uwsgi_passunix:/tmp/testFlask2.sock;🎜🎜

  }

   }

    

場所/パートナー {

    includeuwsgi_params;

    uwsgi_passunix:/tmp/testFlask1.sock;

🎜 🎜🎜rewrite^.+partners/?(.*)$ /$1 休憩;🎜🎜🎜🎜 🎜🎜uwsgi_params を含めます;🎜🎜🎜🎜 🎜🎜uwsgi_passunix:/tmp/testFlask1.sock;🎜🎜

}  }

}

}
🎜testFlask2プロジェクトをポート8080のルートディレクトリにデプロイしました。 Web サービスを提供する testFlask1 プロジェクトを /partners ディレクトリにデプロイします。 しかし、testFlask1 プロジェクトは /partners/json のような URL リクエストを処理できません。それではどうすればいいでしょうか? このコマンドを書き換えることにより、^.+partners/?(.*)$ /$1 Break; nginx は、受信したすべての /partners/* リクエストを /* リクエストに変換し、その背後にある実際の Web サーバーに転送できます。 このように、RESTFUL の ajax クライアント プログラムは、サーバーが提供する RESTFUL インターフェイスを呼び出すために、特定のプレフィックスを付けた URL を与えるだけで済みます。 nginxのリバースプロキシを介しても、他社が開発したWebサイトが提供するRESTFULインターフェースを呼び出すことができます。 など、

1

2

3

4

5

location/sohu {

   rewrite^.+sohu/?(.*)$ /$1 休憩;

  includeuwsgi_params;

  proxy_passhttp://www.sohu.com/;

🎜🎜🎜include🎜uwsgi_params;🎜🎜🎜🎜 🎜🎜proxy_passhttp://www.sohu.com/;🎜🎜

}

sohuのウェブサイト全体を8080:/sohu/ディレクトリに移動し、javascriptはそのRESTFULサービスを自由に呼び出すことができます。 ちなみに、^.+sohu/?(.*)$ /$1 Break; と書き換えます。 このコマンドでは、$1 が (.*) の部分を表します。最初のペア () のパラメータは $1、2 番目のペア () のパラメータは $2 などとなります。 まとめ この記事では、nginxのリバースプロキシ機能を利用して、あらゆるアプリケーションやWebサイトへのクロスドメインアクセスを実現する方法を紹介します。 nginx は、リバース プロキシ サーバーとして一般的に使用される高性能 Web サーバーです。リバース プロキシ サーバーとして、nginx は http リクエストを別のサーバーまたは一部のサーバーに転送します。 クロスドメイン アクセスは、ローカル URL プレフィックスを Web サーバーにマッピングして、クロスドメインでアクセスできるようにすることで実現できます。 ブラウザの場合、アクセスするのは同じオリジンサーバー上のURLです。そして、nginx は URL プレフィックスを検出することで、http リクエストを背後の実際の物理サーバーに転送します。そして、rewrite コマンドを通じてプレフィックスを削除します。こうすることで、実サーバーはリクエストがプロキシ サーバーからのものであることを認識せずにリクエストを正しく処理できます。 簡単に言うと、nginx サーバーはブラウザを騙して同一発信元の呼び出しであると思わせ、それによってブラウザのクロスドメインの問題を解決します。 URL を書き換えることで、実際のサーバーを欺き、http リクエストがユーザーのブラウザから直接送信されたものであると認識させます。 このように、クロスドメインの問題を解決するには、nginx 構成ファイルを変更するだけで済みます。シンプル、強力、そして効率的!

上記では、nginx リバース プロキシを使用してクロスドメインを実現する最も簡単な方法を内容の側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Tomcat サーバーへの外部ネットワーク アクセスを許可する方法 Tomcat サーバーへの外部ネットワーク アクセスを許可する方法 Apr 21, 2024 am 07:22 AM

Tomcat サーバーが外部ネットワークにアクセスできるようにするには、以下を行う必要があります。 外部接続を許可するように Tomcat 構成ファイルを変更します。 Tomcat サーバー ポートへのアクセスを許可するファイアウォール ルールを追加します。 Tomcat サーバーのパブリック IP を指すドメイン名を指す DNS レコードを作成します。オプション: リバース プロキシを使用して、セキュリティとパフォーマンスを向上させます。オプション: セキュリティを強化するために HTTPS を設定します。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

nginx へようこそ!それを解決するにはどうすればよいですか? nginx へようこそ!それを解決するにはどうすればよいですか? Apr 17, 2024 am 05:12 AM

「nginx へようこそ!」エラーを解決するには、仮想ホスト構成を確認し、仮想ホストを有効にし、Nginx をリロードする必要があります。仮想ホスト構成ファイルが見つからない場合は、デフォルト ページを作成して Nginx をリロードすると、エラー メッセージが表示されます。が消え、ウェブサイトは通常のショーになります。

Dockerコンテナ間で通信する方法 Dockerコンテナ間で通信する方法 Apr 07, 2024 pm 06:24 PM

Docker 環境でのコンテナ通信には、共有ネットワーク、Docker Compose、ネットワーク プロキシ、共有ボリューム、メッセージ キューの 5 つの方法があります。分離とセキュリティのニーズに応じて、Docker Compose を利用して接続を簡素化するか、ネットワーク プロキシを使用して分離を強化するなど、最も適切な通信方法を選択します。

phpmyadminの登録方法 phpmyadminの登録方法 Apr 07, 2024 pm 02:45 PM

phpMyAdmin に登録するには、まず MySQL ユーザーを作成して権限を付与し、次に phpMyAdmin をダウンロード、インストール、構成し、最後に phpMyAdmin にログインしてデータベースを管理する必要があります。

Nodejsプロジェクトをサーバーにデプロイする方法 Nodejsプロジェクトをサーバーにデプロイする方法 Apr 21, 2024 am 04:40 AM

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

HTMLファイルからURLを生成する方法 HTMLファイルからURLを生成する方法 Apr 21, 2024 pm 12:57 PM

HTML ファイルを URL に変換するには Web サーバーが必要です。これには次の手順が含まれます。 Web サーバーを取得します。 Webサーバーをセットアップします。 HTMLファイルをアップロードします。ドメイン名を作成します。リクエストをルーティングします。

phpmyadmin のインストールが失敗した場合の対処方法 phpmyadmin のインストールが失敗した場合の対処方法 Apr 07, 2024 pm 03:15 PM

失敗した phpMyAdmin インストールのトラブルシューティング手順: システム要件を確認する (PHP バージョン、MySQL バージョン、Web サーバー)、PHP 拡張機能を有効にする (mysqli、pdo_mysql、mbstring、token_get_all)、構成ファイル設定を確認する (ホスト、ポート、ユーザー名、パスワード)、ファイルを確認するアクセス許可 (ディレクトリの所有権、ファイルのアクセス許可)、ファイアウォール設定の確認 (Web サーバー ポートのホワイトリスト)、エラー ログの表示 (/var/log/apache2/error.log または /var/log/nginx/error.log)、テクニカル サポートの問い合わせ ( phpMyAdmin

See all articles