これは難しい問題です。この質問では、実際に関与しているシステムや、どこで、どのような種類の IP ホワイトリストが使用されているかを明確に把握できないからです。
SOAP を使用する場合、サービスに関する主要な情報源は WSDL リソースに含まれています。xi:include
これは HTTP リクエストを介して取得されることが想定されており、プライマリ リソースの XML に要素が含まれている場合は、追加の HTTP リクエストがトリガーされる可能性があります。これらの要求はすべて、SOAP クライアントとして機能するシステムから発信されます。ここで使用する IP アドレスを選択することはできません (両方ともターゲット システムへの有効なルートがあり、適切な IP を選択することがアプリケーションのタスクである 2 つのインターフェイスを持つという非常に風変わりなセットアップがない限り、これは考えられません。ここではそうであり、私はそれについて考えるのをやめます -これにはストリーム コンテキストを構成し、 「bindto」オプションを設定して、それを SoapClient に渡す必要があります)。
WSDL の内部には、実際の SOAP サーバーの URL が含まれています。サーバー自体が WSDL の記述とはまったく異なるドメインにある可能性があることに注意してください。ただし、そのような設定も一般的ではありません。オプション配列をSoapClient
entry とともにに渡すことで、その場所をオーバーライドできます"location" => "http://different.domain.example/path/to/service"
。これによって WSDL リソースのロードが変更されることはありませんが、SOAP サービスに対するすべての要求は、その別のベース URL に送られます。
この呼び出しは、フォームから情報を収集し、AJAX を使用して PHP 関数に投稿します。この関数は、フィールドを API に適した形式にフォーマットし、PHP SoapClient 経由で送信します。
ここで言及されているクライアントとサーバーはたくさんあります。AJAX が言及されているため、ブラウザーが関与していると思われます。これはクライアントとして機能するシステム 1 です。リクエストが PHP に送信されます。このターゲットは、ここでサーバーとして機能するシステム 2 です。それを変換し、クライアントとして動作して、別のサーバーとして動作しているシステム 3 に SOAP 要求を送信します。
では、ホワイトリストはどこにありますか? システム 3 にある場合は、システム 2 で使用される IP をリストする必要があります。ネットワークに接続されたすべてのコンピューターには複数の IP アドレスがあることに注意してください。IPv6 では、デバイスごとに複数のアドレスさえあります。ここで使用$_SERVER['SERVER_ADDR']
することはあまり意味がありません。さらに、トランスポート ウェイ上にあるシステム (トランスペアレント プロキシなど) も IP に影響を与える可能性があります。ホワイトリストのエントリとして SERVER_ADDR を使用しないでください。シェルのネットワーク設定を実際にチェックして、使用されているネットワーク デバイスとその IP を確認する必要があります。または、接続しようとしているサーバーに問い合わせて、どの IP が表示されているかを確認してください。
$_SERVER['SERVER_ADDR']
また、とを含むすべてのリクエストをログに記録して$_SERVER['REMOTE_ADDR']
います。どちらも期待どおりに IP アドレスを報告しています。側の技術サポートは、「REMOTE_ADDR」値からリクエストを受け取っていると言っています。
これは奇妙なことです。システム 2 の SERVER_ADDR と REMOTE_ADDR は期待どおりに設定されています。これを、REMOTE_ADDR がシステム 1 の IP であり、SERVER_ADDR がシステム 2 の IP であると読みました。しかし、システム 3 はシステム 1 の IP を認識しますか? ここで何が起きてるの?元の投稿者からこれについてもっとフィードバックが欲しいのですが、質問はすでに半年前です。
そして、経験した「IPアドレスの問題」についての適切な説明がありません。それらはどのように見られますか?「接続に失敗しました」というタイムアウトですか、それとも SoapFault をトリガーする 4xx ステータス コードによる適切な HTTP 拒否ですか? この問題は、説明がより適切である場合にのみ、実際に解決できます。
ただし、複雑なコードが含まれている可能性があり、システム 2 で生成された XML がシステム 1 にミラーリングされてからシステム 3 に送信されるため、実際の SOAP 要求は実際にはブラウザー/システム 1 によって送信されるのではないかと思います。少なくとも、システム 1 の IP がシステム 3 に表示される理由を説明します。