You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Nginx代理Kafka出现400错误,求代码修改方案

解决Kafka Nginx代理400错误的配置修改方案

问题核心原因

Kafka基于TCP协议通信,但当前Nginx配置使用了HTTP代理模块,无法处理Kafka的TCP流量,导致400错误。同时存在Broker地址配置错误、代理模式不匹配的问题。

修改后的配置文件

1. docker-compose.yml

无需大幅改动,保持端口映射正确即可:

version: '2'
services:
  nginx:
    image: nginx:1.21.5-alpine
    ports:
      - 4000:4000
      - 443:443
    volumes:
      - ./proxy/nginx.conf:/etc/nginx/nginx.conf
    container_name: nginx-server

2. nginx.conf

替换为stream模块配置,适配Kafka的TCP流量代理:

user nginx;
events {
    worker_connections 1000;
}

stream {
    upstream kafka_brokers {
        # 采用轮询模式,Kafka客户端会自行处理连接稳定性
        server 192.168.0.8:9092;
        server 192.168.0.8:9093;
        server 192.168.0.8:9094;
    }

    server {
        listen 4000;
        proxy_pass kafka_brokers;
        # 开启TCP连接保活,维持长连接稳定性
        proxy_socket_keepalive on;
    }
}

3. kafkajs配置

修正Broker地址为Nginx服务器的IP和监听端口:

const { Kafka } = require('kafkajs');
const { Partitioners } = require('kafkajs');

const kafkaClient = new Kafka({
  clientId: 'icas-client',
  brokers: ['192.168.0.16:4000'], // 改为Nginx所在服务器的IP与端口
});

const producer = kafkaClient.producer({ createPartitioner: Partitioners.LegacyPartitioner });

const consumer = kafkaClient.consumer({ groupId: 'icas' });
module.exports.kafkaClient = kafkaClient;
module.exports.producer = producer;
module.exports.consumer = consumer;

额外注意事项

  • 确保Nginx容器能访问192.168.0.8的9092/9093/9094端口,服务器防火墙需放行对应端口
  • 若需强制客户端全程通过Nginx连接Broker,需修改Broker的advertised.listeners配置为Nginx地址(如PLAINTEXT://192.168.0.16:4000),但此配置会影响Broker集群内部通信,需根据实际场景调整

内容的提问来源于stack exchange,提问作者DEBTOLEE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:42:12