Nginx 作为代理并且客户端速度非常慢的奇怪问题

Nginx 作为代理并且客户端速度非常慢的奇怪问题

我们在 nginx(Ubuntu 20 上的 1.18.0)代理后面有多个端点的 Web API。除了一种情况外,一切正常。当用户使用我们公司的 Android 应用尝试上传附件时使用一个特定的端点 到 nginx 后面的服务器,如果网络连接很差,则 POST 请求根本无法到达服务器。所有其他端点都可以毫无问题地访问。作为管理员,我可以看到长 tcp 流客户端->nginx,我看到nginx 日志中出现 400 错误,向代理 api 服务器发送了零字节。 Wireshark 显示 nginx->server 没有 POST 请求。如果网络速度良好,一切正常。我们用流量整形器测试了这种情况,是的,nginx 确实停止将上传 POST 请求传递给 api 服务器。我们的配置:

upstream my_backend {
    server app.ours.local:8080;   
    keepalive 60;   
}
Server {
    
    listen 443 ssl;     
    server_name our.server;     
    ssl_certificate /etc/nginx/ssl/chain.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;     
    keepalive_timeout 40;
    access_log  /var/log/nginx/our.access.log upstreamlog;
    error_log /var/log/nginx/our.error.crit.log crit;
    error_log /var/log/nginx/our.error.alert.log alert;
    error_log /var/log/nginx/our.error.emerg.log emerg;
    error_log /var/log/nginx/our.error.log error;
    error_log /var/log/nginx/our.error.warn.log warn;
    
    default_type application/json;
    client_max_body_size 100M;          
    
    proxy_http_version 1.1; 
    proxy_redirect off;
    proxy_buffering on;
    proxy_read_timeout 120s;    
    proxy_pass_header Authorization;
    proxy_set_header Connection "";             
    
    proxy_connect_timeout 30s;
    proxy_send_timeout 30s;         
    client_body_timeout 60s;
    }

location / {            
    return 404 "Not found.";    
}
        
location /MobApp/ODataV4/AddServiceFile {

    proxy_set_header Host my_backend;                   
                    
    rewrite ^/MobApp/ODataV4/ /api/ODataV4/APIManagement_AddMMRequestFile?company=Ours break;                                       
    proxy_pass https://my_backend;
}

我们需要我们的 nginx 代理服务器处理来自慢速客户端的长请求,就像它处理正常速度的客户端一样,将请求发送到 nginx 后面的应用服务器。现在它根本就不传递任何数据包。我在访问日志中只看到一条消息,错误为零:

[02/Jun/2023:11:32:30 +0300] status - 400 x.x.x.x - our.server to: y.y.y.y:8080: POST /MobApp/ODataV4/AddServiceFile HTTP/1.1 /api/ODataV4/APIManagement_AddMMRequestFile - bytes_sent - 0

我们尝试过使用 proxy_buffer 和 client_buffer 设置,比如超时和缓存开启/关闭。但没用。现在我不知道如何让 nginx 处理这样的请求,所以任何提示、想法、猜测 - 请帮忙 :-)

相关内容