求助 关于Nodejs服务器 [centeros 6 64位]

求助 关于Nodejs服务器 [centeros 6 64位]

今天VPS的服务商给我发邮件说服务器有问题 所以来求助,看看大家有见过这是什么问题的么?

我就搭了个 nodejs的站点,然后挂了个域名 www.giccoo.com

Your VPS is causing huge connections on the server which is making our entire hardware node unstable and its affecting the other clients on the server. We have stopped your VPS temporarily to make the things stable. We need you to take necessary action towards this issue.
ipv4 2 tcp 6 117 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=6539 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=6539 mark=0 secmark=0 use=2
ipv4 2 tcp 6 119 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=4280 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=4280 mark=0 secmark=0 use=2
ipv4 2 tcp 6 116 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=18431 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=18431 mark=0 secmark=0 use=2
ipv4 2 tcp 6 112 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=2096 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=2096 mark=0 secmark=0 use=2
ipv4 2 tcp 6 117 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=23374 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=23374 mark=0 secmark=0 use=2
ipv4 2 tcp 6 117 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=33192 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=33192 mark=0 secmark=0 use=2
ipv4 2 tcp 6 119 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=11895 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=11895 mark=0 secmark=0 use=2
ipv4 2 tcp 6 119 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=16911 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=16911 mark=0 secmark=0 use=2
ipv4 2 tcp 6 118 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=3030 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=3030 mark=0 secmark=0 use=2
ipv4 2 tcp 6 115 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=28084 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=28084 mark=0 secmark=0 use=2
ipv4 2 tcp 6 119 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=33289 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=33289 mark=0 secmark=0 use=2
ipv4 2 tcp 6 117 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=32396 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=32396 mark=0 secmark=0 use=2
ipv4 2 tcp 6 107 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=21354 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=21354 mark=0 secmark=0 use=2
ipv4 2 tcp 6 117 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=38456 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=38456 mark=0 secmark=0 use=2
ipv4 2 tcp 6 105 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=32779 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=32779 mark=0 secmark=0 use=2
ipv4 2 tcp 6 113 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=63465 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=63465 mark=0 secmark=0 use=2
ipv4 2 tcp 6 118 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=31142 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=31142 mark=0 secmark=0 use=2
ipv4 2 tcp 6 119 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=30389 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=30389 mark=0 secmark=0 use=2
ipv4 2 tcp 6 117 SYN_SENT src=209.148.86.204 dst=115.29.8.77 sport=6114 dport=9000 [UNREPLIED] src=115.29.8.77 dst=209.148.86.204 sport=9000 dport=6114 mark=0 secmark=0 use=2

2 回复

根据你提供的信息,你的Node.js服务器似乎正在产生大量的连接请求,这导致了服务器负载过高,影响到了其他客户的正常使用。以下是可能的原因及解决方案:

可能的原因

  1. DDoS攻击:大量的未授权连接尝试。
  2. 程序错误:代码中可能存在无限循环或频繁发起网络请求的逻辑错误。
  3. 配置问题:服务器配置不当,例如端口绑定、监听数量等。

解决方案

1. 检查代码逻辑

确保你的Node.js应用没有错误的逻辑,例如无限循环或频繁发起网络请求。你可以使用netstat命令来检查当前的连接状态:

netstat -an | grep 9000

2. 使用反向代理

使用Nginx或Apache作为反向代理,可以有效减少直接暴露给外部的连接数,并提供额外的安全层。

Nginx配置示例:
server {
    listen 80;
    server_name www.giccoo.com;

    location / {
        proxy_pass http://localhost:9000;
        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-Proto $scheme;
    }
}

3. 限制连接数

使用cluster模块或第三方库(如pm2)来管理进程和限制连接数。

示例代码:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    console.log(`Master process running on ${process.pid}`);

    for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', (worker, code, signal) => {
        console.log(`Worker ${worker.process.pid} died`);
    });
} else {
    // Worker process
    const server = http.createServer((req, res) => {
        res.writeHead(200);
        res.end('Hello World\n');
    });

    server.listen(9000, () => {
        console.log(`Worker ${process.pid} listening on port 9000`);
    });
}

4. 安全措施

使用防火墙规则限制不必要的连接尝试。例如,使用iptables限制连接速率:

iptables -A INPUT -p tcp --dport 9000 -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

通过以上步骤,你应该能够诊断并解决Node.js服务器上的高连接数问题。如果问题仍然存在,建议进一步检查系统日志和应用程序日志,以获取更多详细信息。


根据你提供的信息,你的Node.js服务器正在产生大量的连接请求,导致服务器不稳定。这可能是由于某些恶意行为或程序错误引起的。以下是一些可能的解决方案和建议:

1. 限制并发连接数

你可以使用cluster模块来创建多个工作进程,每个进程处理一部分连接请求,从而分散负载。

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
    const numCPUs = os.cpus().length;
    for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
} else {
    // 启动你的应用逻辑
    require('./app');
}

2. 使用反向代理

你可以配置一个反向代理(如Nginx)来管理连接,并限制每个客户端的最大连接数。

Nginx 配置示例

http {
    upstream nodejs_backend {
        server 127.0.0.1:9000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://nodejs_backend;
            client_max_body_size 10M;
            client_body_buffer_size 128k;
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            proxy_buffers 8 16k;
            limit_conn_zone $binary_remote_addr zone=addr:10m;
            limit_conn addr 10;
        }
    }
}

3. 检查代码中的死循环或无限循环

检查你的Node.js应用代码中是否有任何可能导致无限循环或大量请求的情况。

4. 监控和日志

启用详细的日志记录和监控,以便更好地了解和诊断问题。

示例代码:限制并发连接数

const http = require('http');
const numWorkers = 4;

function createWorker(id) {
    const worker = http.createServer((req, res) => {
        console.log(`Worker ${id} received request`);
        res.end('Hello World');
    });

    worker.listen(9000 + id);
}

for (let i = 0; i < numWorkers; i++) {
    createWorker(i);
}

通过这些方法,你应该能够减少服务器的压力并防止它变得不稳定。

回到顶部