Web upload slow Nextcloud for small files

I am currently using Nextcloud 12.0.3 on FreeBSD 11.1 on MariaDB with PHP7.1 on nginx. Doing uploads via the web interface is horrifically slow right now. My upload speed from my location is 150Mbps and my server is downloading at 30Mbps. As it stands, downloading synced files from the desktop client is completely fine, as well as mobile. I’m getting exactly the speed I expect, but my 100MB upload to my server via the web is taking about 30 minutes. I believe these errors below are associated with this slow upload speed (from error.log from nginx)

2017/09/29 15:08:40 [error] 86342#101533: accept4() failed (53: Software caused connection abort)
2017/09/29 15:08:42 [error] 86342#101533: accept4() failed (53: Software caused connection abort)
2017/09/29 15:08:44 [error] 86342#101533: accept4() failed (53: Software caused connection abort)
2017/09/29 15:08:46 [error] 86342#101533: accept4() failed (53: Software caused connection abort)

Here is my nextcloud.log info related to this:

{“reqId”:“ID”,“level”:1,“time”:“2017-09-29T22:22:00+00:00”,“remoteAddr”:“internal_ip”,“user”:“username”,“app”:“admin_audit”,“method”:“PUT”,“url”:"/remote.php/webdav/Fall%202017/MIS324/MVC%20Example/WebApplication1/packages/Microsoft.AspNet.Mvc.5.2.3/Content/Web.config.uninstall.xdt",“message”:“File written to: “/Fall 2017/MIS324/MVC Example/WebApplication1/packages/Microsoft.AspNet.Mvc.5.2.3/Content/Web.config.uninstall.xdt””,“userAgent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0”,“version”:“12.0.3.3”}

If there’s other log info you need that I’m missing, let me know. Maybe it’s a problem with PHP? I have opcache enabled and APCu memcache

Forgot my nginx configs:

nginx

user www;
worker_processes 1;

error_log /var/log/nginx/error.log;

events {
worker_connections 1024;
}

http {

include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 70;

upstream php-handler {
	#server 127.0.0.1:9000;
	server unix:/var/run/php-fpm.sock;
}

server_tokens	off;
access_log	/var/log/nginx/access.log;

server {
listen 80;
server_name mydomain.com;
# enforce https
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name mydomain.com;

################# MY STUFF ######################

ssl on;
ssl_certificate /usr/local/etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/mydomain.com/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /usr/local/etc/ssl/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';



            # OCSP Stapling ---
            # fetch OCSP records from URL in ssl_certificate and cache them
            ssl_stapling on;
            ssl_stapling_verify on;


################# MY STUFF ENDS ################

# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
# add_header Strict-Transport-Security "max-age=15768000;
# includeSubDomains; preload;";
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Strict-Transport_security "max-age=15552000; includeSubDomains; preload";

# Path to the root of your installation
root /usr/local/www/nginx/nextcloud;

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
# last;

location = /.well-known/carddav {
  return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
  return 301 $scheme://$host/remote.php/dav;
}

# set max upload size
client_max_body_size 2048M;
fastcgi_buffers 64 4K;

# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml 

application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml
application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc
text/vtt text/x-component text/x-cross-domain-policy;

# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;

location / {
    rewrite ^ /index.php$uri;
}

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
}

location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTPS on;
    #Avoid sending the security headers twice
    fastcgi_param modHeadersAvailable true;
    fastcgi_param front_controller_active true;
    fastcgi_pass php-handler;
    fastcgi_intercept_errors on;
    fastcgi_request_buffering off;
}

location ~ ^/(?:updater|ocs-provider)(?:$|/) {
    try_files $uri/ =404;
    index index.php;
}

# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff|svg|gif)$ {
    try_files $uri /index.php$uri$is_args$args;
    add_header Cache-Control "public, max-age=15778463";
    # Add headers to serve security related headers (It is intended to
    # have those duplicated to the ones above)
    # Before enabling Strict-Transport-Security headers please read into
    # this topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    #  includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
add_header Strict-Transport_security "max-age=15552000; includeSubDomains; preload";
    # Optional: Don't log access to assets
    access_log off;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
    try_files $uri /index.php$uri$is_args$args;
    # Optional: Don't log access to other assets
    access_log off;
}

}

}

Looks like larger files is not the big deal, but rather if I upload a large amount of small files it gets really hung up. A 15MB of files ranging from 1kb to 5mb takes a long time primarily on the small KB-size files