nginx - 允许通过 nginx 访问 kafka
问题描述
美好的一天,我想kafka
从互联网连接到我的服务器。Kafka 安装在虚拟服务器上,所有服务器都隐藏在nginx
.
我更新了 kafka 设置(server.properties
)。添加:listeners=PLAINTEXT://:9092
我可以通过 ip 地址从本地网络连接到 kafka 服务器10.0.0.1:9092
,但无法通过域名从 Internet 连接。
来自卡夫卡的回应:java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Topic test-topic not present in metadata after 60000 ms.
Nginx:[26/Nov/2019:12:38:25 +0100] "\x00\x00\x00\x14\x00\x12\x00\x02\x00\x00\x00\x00\x00" 400 166 "-" "-" "request_time=1.535" "upstream_response_time=-" "upstream_connect_time=-" "upstream_header_time=-"
nginx的配置:
server {
listen 9092;
server_name site.name;
# Max Request size
client_max_body_size 20m;
location / {
proxy_pass http://10.0.0.1:9092;
}
}
有谁知道问题是什么?
解决方案
Kafka 不使用 http 协议进行通信,因此不能以 HTTP 反向代理为前端。
您必须使用 nginx 流定义块进行 TCP 代理
(我没有亲自尝试过)
https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
无法通过域名从 Internet 连接。
听起来你的advertised.listeners
配置有问题。请注意,没有明确的方法可以在代理后面“隐藏”Kafka,因为您的客户端需要单独与每个代理直接通信(因此违背了拥有 Ngnix 的目的,除非您想为每个代理运行一个服务器)
如果您真的想将 Kafka 公开给公共网络,您应该真正使用 SSL/SASL 侦听器,而不是 PLAINTEXT
如果你想使用HTTP,那么你可以安装Kafka REST Proxy,然后把Nginx放在前面
推荐阅读
- javascript - Javascript 运算符“in”不适用于浮点数
- swift - Render text with SKRenderer
- java - 如何检查 JAVA 代码(保留在数据库中)是否正确完成或突然终止?
- xamarin.forms - Xamarin iOS build error - Native linking failed (Link Framework SDKs Only)
- django - 对于 nginx,我是在为这个 url https://localhost:3000 监听端口 443 还是端口 3000?
- c# - AnimationPlayer animations do not play in Godot
- ionic-framework - ionic cordova run android - Ionic 4 命令卡住
- c++ - 提升 Asio 同步 https 调用
- java - 自定义 Nifi 处理器抛出构建错误:来自 Nifi nar maven 插件的空指针异常
- material-ui - Material Ui KeyboardDatepicker - 月份显示无效值