【问题标题】:Run go web application on IIS在 IIS 上运行 Go Web 应用程序
【发布时间】:2021-05-25 15:32:54
【问题描述】:

有没有办法在 IIS 上运行 Go Web 应用程序?
我找到了 azure 的设置,但它在我的开发机器上不起作用
这是 azure 的网络配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="d:\home\site\wwwroot\go\bin\go.exe" 
                      arguments="run d:\home\site\wwwroot\server.go" 
                      startupTimeLimit="60">
            <environmentVariables>
              <environmentVariable name="GOROOT" value="d:\home\site\wwwroot\go" />
            </environmentVariables>
        </httpPlatform>
    </system.webServer>
</configuration>

【问题讨论】:

  • 您必须从 IIS 反向代理到您的 Go 应用程序正在侦听的端口:weblogs.asp.net/owscott/…
  • Go 还有一个 FastCGI responder implementation 和 IIS 7+ 一个使用 FastCGI 后端 can be run as a FCGI application 的 Go 服务器。请注意,据传 FastCGI 响应器比 HTTP 慢一些,因此它可能按照@elithrar 的建议进行反向 HTTP 代理的性能更高。请注意,您的 Go 服务器可能会同时监听 HTTP 和 FCGI 请求。
  • Go 的 FastCGI 服务器客观上比较慢,所以我不推荐它。我必须挖掘基准,但 Go 团队承认它没有看到很多性能。由于需求低而进行调整。
  • 另外,FastCGI 是 HTTP/1.1 之前的遗留物,它提供了大部分相同的好处。使用 FastCGI 的理由很少,除非它是您唯一的选择。
  • 那么根本没有理由使用 IIS,除非你让它为你的应用程序所需的其他资产提供服务。

标签: iis go


【解决方案1】:

您的本地 IIS 不能正常工作,因为您需要安装一个单独的组件,称为 HttpPlatformHandler 模块,

https://azure.microsoft.com/en-us/blog/announcing-the-release-of-the-httpplatformhandler-module-for-iis-8/

http://www.iis.net/downloads/microsoft/httpplatformhandler

反向代理或 FastCGI 是较旧的方法,在这种新方法中不再需要。

【讨论】:

    【解决方案2】:

    HttpPlatformHandler 模块对我不起作用。我发现 this post by Sutean Rutjanalard on Medium 非常有用,它使用 ASP.NET Core 模块。

    基本上,您需要像使用 .net 核心应用程序一样使用“无托管代码”创建应用程序池。以下是web.config。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
            </handlers>
            <aspNetCore processPath=".\YourGoApp.exe" />
        </system.webServer>
    </configuration>
    

    【讨论】:

    • 谢谢,我也是从这个问题开始的。
    • @Mossila 欢迎您。我认为这可能对其他人有所帮助。很高兴它对你也有帮助。
    • 是的,我写这篇文章是在我为找到正确的方法一周而痛苦之后写的!
    • 哦,我不知道你是作者。那我应该谢谢你:)
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多