【问题标题】:nodejs on azure returns 403天蓝色的nodejs返回403
【发布时间】:2018-04-03 13:53:14
【问题描述】:

我做了一个简单的 nodejs web 应用程序并上传到 Azure,但它总是返回 403 禁止。

请求网址:https://wemwebconsole.azurewebsites.net/

请求方法:GET

状态码:403 禁止

我该如何解决这个问题?有什么问题吗?

文件树如所列。

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
    <h1> <%= temp %></h1>
</body>
</html>

server.js

var express = require('express');
var app = express();
var path = require('path');
var ejs = require('ejs');
var serveIndex = function(req, res, next) {
    next();
};
//app.use(express.static(path.join(__dirname, 'dist')));

serveIndex = function(req, res, next) {


    function renderIndex() {

        var data = {
            hhh:'hahaha'
        };
        ejs.renderFile( path.resolve('dist/index.html'), data, 'utf8', function (err, str) {
            if (err === null) {
                res.status(200).end(str);
            }
            else {
                next(err);
            }
        });
    };
    renderIndex()
}

app.get('*', serveIndex);

app.listen(process.env.PORT || 443);

package.json

{
  "name": "app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
   "build": "",
   "dev": "",
    "start": "node server.js"
  },
  "dependencies": {
    "ejs": "2.4.1",
    "express": "~4.13.4"
  },
}

更新: 添加 web.config 不起作用:

<configuration>
<system.webServer>
    <handlers>
        <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
        <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
    </handlers>
    </system.webServer>

【问题讨论】:

  • process.env.PORT === 443?,或者如果你的服务器在负载均衡器后面,它是否转发443 => process.env.PORT
  • 改成“app.listen(process.env.PORT || 443)”,还是不行。
  • 这行不通,我以为你控制了服务器,你没有将请求转发到你的应用程序。检查另一个问题。
  • 还是不行

标签: javascript node.js azure azure-web-app-service


【解决方案1】:
  <?xml version="1.0" encoding="utf-8"?>

  <configuration>

    <system.webServer>        

  <handlers>

    <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>

  </handlers>

  <rewrite>

    <rules>

        <rule name="DynamicContent">

             <match url="/*" />

             <action type="Rewrite" url="server.js"/>

        </rule>

   </rules>

  </rewrite>

</system.webServer>

好的,具体的web.config在这里。

【讨论】:

  • 你救了我,伙计!仅作记录,在没有 Azure 的情况下,独立 IIS 存在此问题。
【解决方案2】:

您可以尝试访问 kudu 控制台来调查问题。 403 错误可能意味着很多事情;要么您无权访问此站点,要么站点已停止,要么已超出配额。欲了解更多信息,您可以参考此文档:https://github.com/projectkudu/kudu/wiki/Investigating-issues

此外,您可以尝试启用诊断日志以检查确切的错误消息,看看是否有帮助:https://docs.microsoft.com/en-us/azure/app-service/web-sites-enable-diagnostic-log

【讨论】:

    【解决方案3】:

    我尝试了您的代码,但它在我的网站上抛出了错误 temp is not defined

    如果我将数据对象更改为以下内容,它可以正常工作:

    var data = {
        temp: 'hahaha'
    };
    

    此外,您可以关注here 的帖子,以启用 stdout 和 stderr 的日志记录,以对 Azure 中的 Node.js 应用程序进行故障排除。

    【讨论】:

    • 对不起,这是一个拼写错误,这个问题在下面的评论中得到解决。谢谢!
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 2013-08-21
    • 2018-08-13
    • 2020-05-19
    • 2018-01-29
    • 2020-10-17
    • 2021-06-19
    • 2014-03-10
    相关资源
    最近更新 更多