Private NuGet server behind nginx (Request Entity Too Large)

Spent some time today trying to make NuGet.Server work so that I can host my own packages. I’m working on a new .NET core project on my Mac and wanted to host the server in IIS which is accessible from various machines.

I’ve got a public facing web server running nginx which is connected to a windows server behind it (actually via VPN). I use nginx proxy_pass feature to pass the request on backwards to the IIS server.

I was trying to push a package to the server and got this error:

PUT http://nuget.XXXXXXX/api/v2/package/
An error was encountered when fetching 'PUT http://nuget.XXXXXXX/api/v2/package/'. The request will now be retried.
Request Entity Too Large

In other cases I just got this:

PUT http://nuget.XXXXXX
An error was encountered when fetching ‘PUT http://nuget.XXXXXX/'. The request will now be retried.
Cannot access a disposed object.
Object name: ‘System.Net.Sockets.NetworkStream'.

(I don’t really know why I seemed to get 2 different errors - I didn’t do much digging).

The cause of this issue was that nginx was limiting the max body size request to 1M and it seems to inspect Content-Length header before receiving the full request. If it exceeds 1M, it returns a 413 error. See client_max_body_size for more info.

The fix is simple. In my case, on my Linux server I opened /etc/nginx/nginx.conf and appended this line:

client_max_body_size 10M;

This needed to be append inside the http {} block.

Restart nginx and push again.

Hope this helps someone.

comments powered by Disqus