1

だから私の環境は C# asp.net sitefinity webforms/mvc/webapi ハイブリッドです。Amazon elb の背後にある IIS 7 にアプリケーション プールがあります。

IIS に foo.com というサイトがあります。bar というアプリケーションを foo.com に追加しました。したがって、私の他のサイトには foo.com/bar からアクセスできます。

これら 2 つのサイトは正常に動作します (ほとんどの場合)。しかし、foo.com/bar/* に属する同じ URL にアクセスすると、404 エラーが発生することがあります。ブラウザーのアドレス バーで Enter キーを押すと、再び表示されます。404 を複製するのは難しく、ページをレンダリングするときもあれば、404 を取得するときもあります。

問題は、取得した 404 ページが foo.com/bar ではなく foo.com からのものであることです。

そのため、foo.com/bar が URL を解決するのではなく、foo.com が URL を解決しようとしているように見えることがあります。

elb に着信する https トラフィックが http としてアプリケーションに送信されることに気付きました。elb は何かおかしなことをすることがありますが、そうでないこともありますか?

とにかく、トラブルシューティングを行うために、foo.com のアプリケーションで foo.com/bar へのすべての URL リクエストを無視するようにしたいので、それでも 404 が発生する場合は、少なくともサブ アプリケーション (foo.com/bar) から 404 ページが必要です。

だから私はこのルールをfoo.com web.configに追加することを考えています

<rule name="Ignore bar" stopProcessing="true">
  <match url="^.*foo.com/bar/.*" />
  <action type="None" /> 
</rule>

しかし、私はアクションが何をするのか分かりません。なしは何をしますか?私の意図は、正規表現が一致した場合、foo.comにURLを無視させ、foo.com/barにURLを取得させることです。

foo.com/bar はテスト モードですが、foo.com はライブ サイトなので、何も壊したくありません。

ところで、開発環境またはステージング環境 (IIS アプリケーションがライブと同じ形式でセットアップされている) で foo.com/bar/* に 404 を取得しません。

主な違いは Amazon 環境のようですが、間違っている可能性があります。

それで、私のルールは機能しますか?それとももっと良い方法がありますか?

編集:これが関連しているかどうかはわかりませんが、私のAmazonインスタンスでsitefintyはいくつかのHTTP PUTエラーを示しています(私が推測するelbが私のサブアプリケーション(foo.com/bar)に何かをPUTしようとしているとき、エラータイムアウトです)。

編集 2: https で (foo.com/bar への) WebApi メソッドへの Get 呼び出しを試行すると、常に foo.com から 404 が返されます。しかし、http で同じ URL を使用すると、期待どおりのデータが得られます。これは一貫して再現可能であるようです。

4

2 に答える 2

0

私はこれを解決しました。

問題は、別の akamai ロード バランサーがある amazon ELB の上にありました。Akamai は特定の URL をキャッシュして間違ったサーバーに送信していたため、Akamai がリクエストを送信したサーバー上にサブアプリケーションがなかったため、404 が返されました。

Akamai のキャッシュをクリアすると、すべてのリクエストが機能し、正しいサーバーとアプリケーションに到達するようになりました。

ライブ環境がこのように設定されていることを知らなかったため、この情報を質問に含めませんでした。

于 2013-10-10T03:14:40.297 に答える