ASP.NET Core 2.0 ngrok 502 Bad Gateway错误

11

我之前使用ngrok在ASP.NET 4.X中没有遇到任何问题。

但是,当我尝试转发在ASP.NET Core 2中构建的应用程序时,我遇到了一个无法解决的问题。

我尝试使用以下命令组合启动ngrok:

ngrok http 44374-host-header="localhost:44374"

ngrok http -host-header=rewrite localhost:44374

ngrok http 44374

所有命令都会产生相同的结果。Ngrok隧道已启动,但是当我尝试打开给定的转发url时,网站加载了几分钟,然后显示502 Bad Gateway错误。这适用于http和https版本。

以管理员身份运行Visual Studio或ngrok也无法解决问题。

本地主机上的网站正常工作

使用ngrok运行网站会出现502 Bad Gateway错误


这是 --host-header 而不是 -host-header,这可能是你的问题。 - Gustavo Topete
两者都是一样的。我不认为问题在这里。在我使用的asp.net 4.x上,一切都正常运行。- Deleroy 10分钟前 - Deleroy
真的吗?当我只使用一个破折号时,它对我没有起作用。 - Gustavo Topete
5个回答

12

我解决了我的问题。

properties/launchSettings.json 内容:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:59889/",
      "sslPort": 44374
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "https://localhost:44374/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "NgrokTEST": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:59890/"
    }
  }
}

原来 ASP.NET Core 在使用 SSL 连接时会使用不同的端口,默认情况下。

将端口更改为正常端口(在我的情况下是59890),在 ngrok 中解决了这个问题。


8

我希望发布以下修复方法,如果有人正在使用Docker来运行ASP Core 2.X应用程序,并且是通过https协议访问的,则以下方法可能会对您有所帮助:

ngrok http https://localhost:[PORT] --host-header="localhost:[PORT]" --subdomain [YOUR_SUBDOMAIN]

Example:
ngrok http https://localhost:44390 --host-header="localhost:44390" --subdomain 2gtest

有了这个,我能够顺利运行ngrok而不会出现502错误。


1
对我来说,这个解决方案比Deleroy的更有效。 - Joe Lau
2
请注意,此解决方案需要在ngrok.com上注册:仅在您注册后,才能将本地端口443或本地https:// URL转发 - LoremFooBar

2

只需在项目上右键单击->属性,然后禁用SSL


1
这是关于ngrok的问题。为了使ngrok与.Net Core配合使用,您需要:
  • 注册一个ngrok账户
  • 登录后,ngrok会给您一个authtoken。将其复制到记事本中。
  • 在命令提示符处,输入ngrok authtoken。您应该会收到一条消息,告诉您已为您创建了一个.yml文件。
  • 在同一个命令提示符下,输入ngrok http https://localhost:44358 -host-header="localhost:44358",或者VS提供给您的任何端口。
  • ngrok会响应一个常规url和一个https url(我总是选择https)

如果您在Java中编写API,则要简单得多。您只需要输入ngrok http。

不确定为什么ngrok更喜欢Java而不是.Net,但这就是我们生活的世界。


0

我已经成功地使用ngrok将http和https转发到http端口。例如,如果您的应用程序在5000端口上运行http和5001端口上运行https,则运行:

ngrok http 5000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接