使用 nginx 代理 apache 上传速度非常慢

使用 nginx 代理 apache 上传速度非常慢

我的服务器上有一个 nginx 服务器代理 apache,设置一直运行良好……直到昨天,我发现使用 PHP 脚本上传文件实际上非常慢。由于直接使用 Apache(在另一个端口上)上传仍然非常快,我得出结论,nginx+apache 二重奏是罪魁祸首。问题是,我不知道如何修复它……

这是我的 nginx.conf

user apache;
worker_processes 16;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    server_tokens off;
    include       mime.types;
    default_type  application/octet-stream;

    server_names_hash_bucket_size 128;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    tcp_nodelay        on;
    gzip              on;
    gzip_comp_level   5;
    gzip_http_version 1.0;
    gzip_min_length   0;
    gzip_types        text/plain text/css image/x-icon application/x-javascript;
    gzip_vary         on;

    client_header_timeout 10m;
    client_body_timeout 10m;
    send_timeout 10m;

    fastcgi_read_timeout 600;
    fastcgi_send_timeout 600;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

我的 proxy.conf 文件如下所示:

proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Protocol  $scheme;
client_max_body_size    500m;
client_body_buffer_size 256k;
client_header_buffer_size 1k;
proxy_connect_timeout   1200s;
proxy_send_timeout      1200s;
proxy_read_timeout      1200s;
proxy_buffer_size       128k;
proxy_buffers           4 256k;
proxy_busy_buffers_size 256k;

并且,如果它很重要的话,iptable 规则:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:20
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:21
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20000
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:10000
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:995
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

另外,奇怪的是,通过 nginx 代理 Thin(Ruby on Rails)上传仍然正常。问题只发生在那些 Apache+nginx 上,其他的都不会发生。

你们中有人遇到过这种情况吗?提前谢谢大家。

编辑:为了提供更多详细信息,对于 8MB 的文件,Chrome 状态栏显示上传前 15% 总是非常快。然后进度开始减慢直至永远。

相关内容