18

我们有一个内部 NuGet 服务器(使用 NuGet.Server 包的 ASP.net 应用程序),我们希望将它与 Octopus 一起使用来部署包。所以你遇到的第一件事就是包裹太大了。

当您推送大于 7 Meg 左右的包裹时,您会得到: 无法处理请求。'请求的实体太大'。远程服务器返回错误:(413) Request Entity Too Large..

根据 Octopus 上的文档,我更新了 web.config 文件以进行更改。

<configuration>
    <configSections>
        <sectionGroup name="elmah">
            <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
            <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
            <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
            <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
        </sectionGroup>
    </configSections>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
        <httpModules>
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
        </httpModules>
        <httpRuntime maxRequestLength="419430400" executionTimeout="3600"/>
    </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules runAllManagedModulesForAllRequests="true">
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler"/>
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler"/>
        </modules>
        <staticContent>
            <mimeMap fileExtension=".nupkg" mimeType="application/zip"/>
        </staticContent>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="419430400"/>
            </requestFiltering>
        </security>
    </system.webServer>
    <elmah>
        <security allowRemoteAccess="false"/>
        <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data"/>
    </elmah>
    <location path="elmah.axd" inheritInChildApplications="false">
        <system.web>
            <httpHandlers>
                <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
            </httpHandlers>
        </system.web>
        <system.webServer>
            <handlers>
                <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode"/>
            </handlers>
        </system.webServer>
    </location>
    <appSettings>
        <add key="apiKey" value="KeyHere"/>
        <add key="packagesPath" value=""/>
    </appSettings>
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    </system.serviceModel>
</configuration>

那是行不通的。其他帖子谈论运行类似(IIS7)的东西:appcmd.exe set config -section:system.webServer/serverRuntime /uploadReadAheadSize:"419430400" /commit:apphost

或 (IIS6):cscript adsutil.vbs 设置 w3svc/1/uploadreadaheadsize 419430400

我两个都试了都无济于事。两个命令都没有返回错误,所以我假设值 '419430400' 对于所有调用都是正确的(字节与其他一些大小单位)。

有人知道我错过了什么吗?

我最终只是将包复制到 Web 服务器上的共享中,但我真的希望 push 命令能够正常工作。

谢谢。

4

8 回答 8

35

不完全回答 OP 的问题,但与主题相关,我(413) Request Entity Too Large在使用NuGet push推送到本地 SymbolSource 服务器时遇到错误 - 原来我提交到一个稍微不正确的 URL,一旦我更正了指​​向基本/NuGet/URL的命令,它运行得很好。

不知道为什么不正确的 URL 会导致 413 错误,但是你去吧。希望这可以帮助某人。

编辑:根据下面的评论,您可能更幸运只是引用基本http://www.myserver.com/URL 而不是包括 /NuGet。值得玩一下。

于 2013-07-23T14:36:06.470 回答
7

我知道这是一个老问题,但今天我遇到了同样的错误。值得注意的是,我正在使用TeamCity包构建和发布。无论如何,当我尝试使用Publish我的大包(大约 200 MB)时,我被阻止了。解决方案很简单:

而不是发布到http://mynugetserver/api/v2/使用: http://mynugetserver/

于 2014-02-12T11:47:10.677 回答
2

您必须将这些人设置为更高的值:

  • system.web - httpRuntime - maxRequestLength 到,比如说,1048576
  • system.webserver - 安全 - requestFiltering - requestLimits - maxAllowedContentLength to,比如说 1073741824

这两个值的单位不同,因此第二个值应大于第一个值。

另外,请查看 www.myget.org,我在使用 Octopus Deploy 时发现它很棒。

于 2012-11-20T07:14:03.667 回答
2

检查您的serverRuntime配置。

maxRequestEntityAlloweduploadReadAheadSize属性分别配置请求的实体正文中允许的最大字节数以及 Web 服务器将读取到缓冲区并传递给 ISAPI 扩展的字节数的限制。

更多细节:http ://www.iis.net/configreference/system.webserver/serverruntime

我的猜测是您正在使用SSL和设置uploadReadAheadSize将解决问题。因为在客户端重新协商过程中,请求实体主体必须使用 SSL preload 进行预加载。SSL 预加载将使用uploadReadAheadSize用于 ISAPI 扩展的属性值。

这是默认值

<location path="Default Web Site"> 
   <system.webServer> 
      <serverRuntime enabled="true" 
         uploadReadAheadSize="49152" 
         maxRequestEntityAllowed="4294967295" /> 
   </system.webServer> 
</location>
于 2013-01-31T17:24:50.110 回答
2

基于@Keith@Nubigetter的回答,我做了一些进一步的研究,因为这种行为对我来说真的很奇怪。

答案实际上在 Nuget.Server 的文档中(如果你仔细看的话),只是不是很明显:

我在https://github.com/NuGet/NuGetGallery/issues/2903向 Nuget 团队提出了这个问题,因为我认为这种行为是“提供改进的机会”。

于 2016-02-25T00:47:56.583 回答
0

我遇到过同样的问题:

[Step 1/2] Publishing package to feed at http://localhost/OctopusDeploy/nuget/packages...
[Step 1/2] Failed to push to package feed at 'http://localhost/OctopusDeploy/nuget/packages/'. 
[Step 1/2] (The server responded with: [413] Request Entity Too Large)
[Step 1/2] Process exited with code 1

但那是因为 Octopus Deploy 服务停止了!

于 2020-05-22T08:37:03.740 回答
0

这是由于 nginx 的限制,Linux 系统中的 nuget 服务器使用 nginx 作为代理,配置文件位于:

/etc/nginx/conf.d/nuget.conf

server_name localhost;
root /var/www/public/;
client_max_body_size 200M;

更改 client_max_body_size 200M 对我有用。

于 2021-08-13T09:22:46.587 回答
-1

对我有用的是这篇文章:

http://blogs.blackmarble.co.uk/blogs/rfennell/post/2012/10/31/403-and-413-errors-when-publishing-to-a-local-Nuget-Server.aspx

“重要提示:第​​二个错误是一个红鲱鱼,您不需要 URL 末尾的 /nuget”

于 2015-03-06T15:04:38.800 回答