nginx 在攻击下断开连接

nginx 在攻击下断开连接

在 nginx 提供的 12KB css 文件上运行 siege 时,它​​实际上会丢弃一些请求。它运行在 VPS Ubuntu 10.04 安装上。这是由我的 nginx 配置引起的,还是我必须接受的,使用 VPS?

# nginx siege -d1 -t1M -c300 css-file

Lifting the server siege...      done.
Transactions:               2307 hits
Availability:              99.87 %
Elapsed time:              59.12 secs
Data transferred:          27.40 MB
Response time:              6.43 secs
Transaction rate:          39.02 trans/sec
Throughput:             0.46 MB/sec
Concurrency:              250.95
Successful transactions:        2307
Failed transactions:               3
Longest transaction:           39.22
Shortest transaction:           0.49

nginx 配置:

user www-data;
worker_processes  8;

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

events {
    worker_connections  2048;
    # multi_accept on;
    accept_mutex on;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;

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

    default_type application/octet-stream;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        off;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_proxied any;
    gzip_min_length 500;

    upstream app_server {
        server unix:/tmp/.sock fail_timeout=0;
    }
}
server {
    listen  80  default;
    server_name www.example.com example.com;
    # added gunicorn
    client_max_body_size 4G;
    keepalive_timeout 5;

    root /srv/static/example;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://app_server;
            break;
        }
    }
}

答案1

您应该做的是使用munin或收集另一端的指标collectd,并尝试找出瓶颈所在(如果有的话)。根据您提供的信息,瓶颈可能是多种多样的,包括您无法控制的网络问题。

另外,您正在块if内使用该指令location。请参阅这里

指令 if 在位置上下文中使用时会出现问题,在某些情况下,它不会按照您的预期执行,而是执行完全不同的操作。在某些情况下,它甚至会出现段错误。最好避免这种情况。

这也可能是问题的根源。

答案2

我想说,当你对服务器施加过多查询压力时,看到一些连接断开是很正常的事。

基本上,您可以在不丢失请求的情况下最大化连接数的点是您的服务器吞吐量。(这是您希望通过基准测试找到的东西之一)

其次,我不会相信 VPS 可以进行“硬核计算” :P

希望这可以帮助..

相关内容