在Azure网站上的Node.js服务器中强制HTTPS请求

wtlkbnrh  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(192)

我在Azure网站上的IIS中部署了Node.js服务器,我想阻止或重定向http请求。我socket.io在我的服务器上使用Express + www.example.com。
我找到了两种方法来做到这一点:
1.在实际的socket.io代码中通过将allowRequest参数传递给socket.io。所以我的代码看起来像这样:

var checkRequest = function (req, fn) {
           fn(err, true);
    };

var ioOptions = {
            pingInterval: socketPingInterval,
            pingTimeout: socketPingTimeout,
            path: "/" + config.API_VERSION + "/socket.io",  
            allowRequest : checkRequest
    };

    _socketListener = io.listen(server, ioOptions);

问题是代码永远不会进入checkRequest方法,我不知道为什么。
1.将规则添加到web.config文件。我查了几个论坛,大家都说如果我添加这段代码:

<rule name="RedirecttoHTTPS">
        <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                <add input="{URL}" pattern="/$" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            </conditions>
            <action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="SeeOther" />
</rule>

它会将我的hpt请求重定向到HTTPS。但它仍然工作,我可以通过HTTP访问。
接下来我可以尝试什么?

w8rqjzmb

w8rqjzmb1#

使用Kudu Console,在d:\home\site文件夹中创建一个applicationhost.xdt文件,包含以下内容:

<rewrite xdt:Transform="InsertIfMissing">
    <rules xdt:Transform="InsertIfMissing">
      <rule name="Force HTTPS" enabled="true" stopProcessing="true">
        <match url="(.*)" ignoreCase="false" />
        <conditions>
          <add input="{HTTPS}" pattern="off" />
          <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>

然后删除你添加到web.config中的任何内容。这应该能行

xa9qqrwz

xa9qqrwz2#

这对我在Azure中的Node Web应用程序起作用...
https://stpdev.wordpress.com/2015/09/23/force-https-redirection-for-nodejs-apps-hosted-in-azure/

<rewrite>
    <rules>
        <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="true" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>

相关问题