web-dev-qa-db-ja.com

Azure Webアプリがhttpをhttpsにリダイレクトする

Webアプリでnodejsと書かれたサーバーサイドでAzureクラウドを使用しています。 Webアプリがhttpリクエストを受信したときに、リクエストをhttpsにリダイレクトしたいので、解決策を見つけました。それをrulesタグ内のweb.configファイルに入れます

        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_Host}/{R:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>

問題は、ブラウザに「 https://myURL.com 」と入力すると、すべてが正常にメイン画面にリダイレクトされますが、httpsをhttpに変更すると「 http:// myURL.com " https://myURL.com/ "にリダイレクトされ、URLが " http: //myURL.com/bin/www "、応答は:ページが見つかりません。

問題は、URLにデータを追加せずにクリアURLをリダイレクトする方法です。

私のweb.configファイルの一部:

<rewrite>
      <rules>
        <!-- Do not interfere with requests for node-inspector debugging -->
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^bin/www\/debug[\/]?" />
        </rule>
        <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}" />
        </rule>
        <!-- All other URLs are mapped to the node.js site entry point -->
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
          </conditions>
          <action type="Rewrite" url="bin/www" />
        </rule>
        <!-- Redirect all traffic to SSL -->
         <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_Host}/{R:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
    <!-- 'bin' directory has no special meaning in node.js and apps can be placed in it -->
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin" />
        </hiddenSegments>
      </requestFiltering>
    </security>

答えてくれてありがとう、マイケル。

11

このための無料でオープンソースの拡張機能もあります。

  1. Webアプリ設定のサイドバーに移動し、[拡張機能]タブを検索して、[追加]をクリックします。

Extension Tab

  1. 下にスクロールして、Redirect HTTP to HTTPSbygregjhoganを見つけます。

Add Extension

  1. 利用規約に同意します。

Accept Terms

  1. アクションをすぐに有効にするには、Webアプリを再起動します。

  2. できました!

この拡張機能の実装の詳細については、 GitHubのソースコードを確認してください 。最も重要なソースファイルはapplicationhost.xdt

引用 GitHubから02-08-2017)(クレジットはgregjhogan):

applicationhost.xdt

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
    <location path="%XDT_SITENAME%" xdt:Transform="InsertIfMissing" xdt:Locator="Match(path)">
        <system.webServer xdt:Transform="InsertIfMissing">
            <rewrite xdt:Transform="InsertIfMissing">
                <rules xdt:Transform="InsertIfMissing" lockElements="clear">
                    <rule name="redirect HTTP to HTTPS" enabled="true" stopProcessing="true" lockItem="true">
                        <match url="(.*)" />
                        <conditions>
                            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                            <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
                        </conditions>
                        <action type="Redirect" url="https://{HTTP_Host}/{R:1}" appendQueryString="true" redirectType="Permanent" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </location>
</configuration>
7
pgmank

2017年11月の時点で、これはAzure Portalの単純なスイッチになりました:カスタムドメインの下の「HTTPSのみ」。

https://blogs.msdn.Microsoft.com/benjaminperkins/2017/11/30/how-to-make-an-Azure-app-service-https-only/

ARMでも非常に簡単です:“httpsOnly”: true

5
Johan Karlsson

R:1は、ルールパターンへの 後方参照 です。これをここのURLに追加します。

url="https://{HTTP_Host}/{R:1}" 

それをに変える

url="https://{HTTP_Host}" 

その結果、httpsルートにリダイレクトされます。

3
LoekD

Azureポータルに移動し、HTTPSのみに設定する(Web)App Serviceの概要ページを開きます。サイドバーのスタイルセクションの下に、TLS/SSL設定のオプションがあります。クリックすると、画面にHTTPSのみに設定するオプションが表示されます。このために個別のルールセットを手動で追加する必要はありません。これは、「F」シリーズ(無料サブスクリプション)を含むApp Serviceプランのすべての層で機能します。

SSL/TLS Settings Page

PS:私はこの質問が約3年前に尋ねられたのを見ました、そしてその時おそらくこれを行う直接的な選択肢はなかったでしょう。しかし、2020年2月にGoogleでこの質問が自動HTTPSリダイレクションに関するさまざまな質問で1位になり、新しい視聴者に役立つと考えているため、私はまだ回答を投稿しています。

0
Divyansh Singh