502 Bad Gateway - Allow ヘッダーのない 405 レスポンス

<ph type="x-smartling-placeholder"></ph> 現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント
詳細

症状

クライアント アプリケーションが HTTP ステータス コード 502 Bad Gateway とエラーを取得する API 呼び出しのレスポンスとしてコード protocol.http.Response405WithoutAllowHeader を渡します。

エラー メッセージ

クライアント アプリケーションが次のレスポンス コードを受け取ります。

HTTP/1.1 502 Bad Gateway

また、次のエラー メッセージが表示される場合があります。

{
   "fault":{
      "faultstring":"Received 405 Response without Allow Header",
      "detail":{
         "errorcode":"protocol.http.Response405WithoutAllowHeader"
      }
   }
}

考えられる原因

このエラーは、バックエンド サーバーが 405 Method Not Allowed ステータスで応答した場合に発生します。 Allow ヘッダーのないコードを追加します。

仕様に従う <ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.5: 405 Method Not Allowed に該当する場合、配信元サーバーが 405 レスポンスで、次を含む Allow ヘッダー フィールドを生成して送信しなければなりません。 ターゲット リソースで現在サポートされているメソッドのリスト。そうでない場合、Apigee から 502 Bad Gateway、エラーコード protocol.http.Response405WithoutAllowHeader

原因 説明 トラブルシューティングの実施対象
バックエンド サーバーからの Allow ヘッダーのない 405 レスポンス API リクエストを処理しているバックエンド サーバーが、Allow ヘッダーなしで 405 ステータス コードを返します。 Edge Public Cloud ユーザーと Edge Private Cloud ユーザー

共通の診断手順

このエラーを診断するには、次のいずれかのツールまたは手法を使用します。

API Monitoring

<ph type="x-smartling-placeholder">

API Monitoring を使用してエラーを診断するには:

  1. Edge UI に、 付与します
  2. 問題を調査する組織に切り替えます。

    org のプルダウン リスト
  3. [Analyze] >API モニタリング >Investigate ページをご覧ください。
  4. エラーが発生した期間を選択します。
  5. 障害コードTime に対してプロットします。

    <ph type="x-smartling-placeholder">
  6. 障害コードが含まれているセルを選択してください 次のように protocol.http.Response405WithoutAllowHeader します。

  7. 障害コード protocol.http.Response405WithoutAllowHeader に関する情報 次のように表示されます。

  8. [ログを表示 ] をクリックし、失敗したリクエストの 1 つを開いて詳細情報を表示します。

  9. [ログ] ウィンドウで、次の詳細をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • ステータス コード: 502
    • 障害の発生元: target
    • 障害コード: protocol.http.Response405WithoutAllowHeader
  10. [Fault Source] が target で [Fault Code] が protocol.http.Response405WithoutAllowHeader の場合、これはバックエンドが サーバーが 405 Method Not Allowed ステータス コードを返し、応答がありませんでした。 Allow ヘッダー。

Trace ツール

<ph type="x-smartling-placeholder">

Trace ツールを使用してエラーを診断するには:

  1. を有効にする トレース セッションと、 <ph type="x-smartling-placeholder">
      </ph>
    • 502 Bad Gateway エラーが発生するのを待つ。または
    • 問題を再現できる場合は、API 呼び出しを行って問題を再現してください。 502 Bad Gateway 件のエラー
  2. [Show all FlowInfos] が有効になっていることを確認します。

  3. 失敗したリクエストのいずれかを選択し、トレースを調べます。
  4. トレースのさまざまなフェーズを移動して、エラーが発生した場所を特定します。
  5. このエラーは通常、Request sent to target server の後のフローで発生します。 示されます。

  6. トレースのエラーの値をメモします。

    上記のサンプル トレースでは、エラーが Received 405 Response without Allow Header と表示されます。リクエストがバックエンドに送信された後に Apigee によってエラーが生成されるため バックエンド サーバーが 405 レスポンス ステータス コードを送信したことを示します。 を Allow ヘッダーなしで取得します。

  7. トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
  8. [Phase Details] の [Error / Response Headers] セクションまで下にスクロールします。 パネルで 次のように、X-Apigee-fault-codeX-Apigee-fault-source の値を設定します。

  9. X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値が次のように表示されます。 それぞれ protocol.http.Response405WithoutAllowHeadertarget です。 これは、このエラーの原因は、バックエンドが Allow ヘッダーのない 405 レスポンス ステータス コード。
    レスポンス ヘッダー
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

<ph type="x-smartling-placeholder">

NGINX アクセスログを使用してエラーを診断するには:

  1. プライベート クラウド ユーザーは、NGINX アクセスログを使用して、 HTTP 502 エラーに関する主要な情報。
  2. NGINX アクセスログを確認します。

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    ここで、 ORGORGPORT# は実際の値に置き換えます。

  3. エラーコードを含む 502 エラーがないか検索します 特定の期間に protocol.http.Response405WithoutAllowHeader(ユーザーが 過去に発生した問題)またはイベントで引き続き失敗するリクエストが 502
  4. X-Apigee-fault-code 502protocol.http.Response405WithoutAllowHeader の値を求め、 X-Apigee-fault-source. の値。

    NGINX アクセスログの 502 エラーの例:

    NGINX アクセスログの上記のサンプル エントリには、X-Apigee- fault-code X-Apigee-fault-source:

    レスポンス ヘッダー
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

原因: バックエンド サーバーからの Allow ヘッダーのない 405 レスポンス

診断

  1. 502 Bad Gateway障害コード障害の発生元を特定します。 API Monitoring、Trace Tool、または NGINX アクセスログを使用する 一般的な診断手順
  2. 障害コードprotocol.http.Response405WithoutAllowHeader で、 Fault Source の値が target の場合、これはバックエンド サーバーで が、Allow ヘッダーなしで 405 ステータス コードを返しました。したがって、 Apigee がエラーコードで 502 Bad Gateway を返します。 protocol.http.Response405WithoutAllowHeader

解決策

この問題を解決するには、次のいずれかの方法を使用します。

バックエンド サーバー

オプション 1: Allow ヘッダーで 405 ステータス コードを送信するようにバックエンド サーバーを修正します。

<ph type="x-smartling-placeholder">
  1. バックエンド サーバーが常に仕様を遵守していることを確認する <ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.5: 405 Method Not Allowed を使用し、405 ステータスで送信します。 Allow ヘッダーの一部として許可されるメソッドのリストを含めることで、コードにコードを追加する 次のように指定します。

    Allow: HTTP_METHODS
    
  2. たとえば、バックエンド サーバーが GETPOSTHEAD メソッドを使う場合、Allow ヘッダーに 次のように指定します。
    Allow: GET, POST, HEAD
    

障害処理

方法 2: 障害処理を使用して、API から Allow ヘッダーと 405 ステータス コードを送信する proxy:

<ph type="x-smartling-placeholder">

バックエンド サーバーが Allow なしで 405 ステータス コードを返す場合 ヘッダーに対して、障害処理を使用して 405 ステータス コードと 次のように、API プロキシから Allow ヘッダーを取得する必要があります。

  1. たとえば、 AssignMessage ポリシー または RaiseFault ポリシー ステータス コードを 405Allow ヘッダーとカスタム)に設定します。 表示されます。

    Allow ヘッダーを使用して 405 を送信する AssignMessage ポリシーの例:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader">
        <DisplayName>AM-405WithAllowHeader</DisplayName>
        <Set>
            <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload>
            <StatusCode>405</StatusCode>
            <ReasonPhrase>Method Not Allowed</ReasonPhrase>
        </Set>
        <Add>
            <Headers>
                <Header name="Allow">GET, POST, HEAD</Header>
            </Headers>
        </Add>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    
  2. ポリシーを呼び出す FaultRuleTargetEndpoint に作成する エラーコードとともに 502 エラーが表示された場合 protocol.http.Response405WithoutAllowHeader

    FaultRule を示す TargetEndpoint 構成の例:

    <TargetEndpoint name="default">
    ...
        <FaultRules>
           <FaultRule name="405WithoutAllowHeader">
                <Step>
                    <Name>AM-405WithAllowHeader</Name>
                </Step>
                <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition>
            </FaultRule>
        </FaultRules>
    
  3. これらの変更を API プロキシの新しいリビジョンに保存し、そのリビジョンをデプロイします。
  4. API 呼び出しを実行し、次のコマンドを実行すると 405 ステータス コードが返されることを確認します。 Allow ヘッダー。

プロパティの構成

オプション 3: Message Processor でプロパティを構成して Apigee Edge で 502 エラーが返される

  1. Private Cloud ユーザーは、プロパティを更新できます HTTP.ignore.allow_header.for.405true に変更し、Apigee Edge が バックエンド サーバーが 405 と応答しても 502 エラーが発生する ステータス コード(Allow ヘッダーなし)(入門ガイドを使用): Message Processor で 405 プロパティの ignore allow ヘッダーを構成する
  2. Public Cloud ユーザー の場合は、Apigee Edge サポートにお問い合わせください。

仕様

Apigee は、バックエンド サーバーからの 405 Method Not Allowed レスポンスを想定します。 次の仕様に従って Allow ヘッダーに置き換えます。

仕様
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.5: 405 Method Not Allowed
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 7.4.1: Allow

主な注意点

推奨される解決策は、405 ステータス コードを送信するようにバックエンド サーバーを修正することです。 Allow ヘッダーを使用し、仕様に従う <ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.5: 405 Method Not Allowed をご覧ください。

Apigee サポートのサポートが必要な場合は、にアクセスしてください。 診断情報の収集が必要な場合

診断情報の収集が必要な場合

上記の手順でも問題が解決しない場合は、以下の情報を収集します。 Apigee Edge サポートにお問い合わせください。

Public Cloud ユーザーの場合は、次の情報を提供します。

  • 組織名
  • 環境名
  • API プロキシ名
  • 次のコマンドで 502 Bad Gateway を再現するための curl コマンドを完成させました。 エラーコード protocol.http.Response405WithoutAllowHeader
  • API リクエストのトレース ファイル

Private Cloud ユーザーの場合は、次の情報を提供します。

  • 失敗したリクエストについて観測された完全なエラー メッセージ
  • 環境名
  • API プロキシ バンドル
  • API リクエストのトレース ファイル
  • NGINX アクセスログ

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    ここで、 ORGORGPORT# は実際の値に置き換えます。

  • Message Processor システムログ
    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

参照

Apigee での障害処理