Bonjour, Habr! Je suis Alexey Kashavkin, ingénieur des opérations cloud chez G-Core Labs, et j'administre OpenStack depuis cinq ans. Aujourd'hui, je vais parler d'une béquille pour une utilisation non standard des technologies ou comment mettre les courtiers Kafka derrière Nginx. Si, pour une raison quelconque, vous n'avez pas d'autre moyen de recevoir des messages, cette note est juste pour vous.

Pourquoi est-ce nécessaire
, Kafka, . — — PoC- , Kafka c Elasticsearch. (SSL/TLS), PEM- Kafka . , Puppet. Nginx. , , Kafka - , . — , - - .
, - , legacy-, , - HTTP, .
, . Nginx:
echo
kafka-log
, . c , c :
load_module /etc/nginx/modules/ngx_http_echo_module.so;
load_module /etc/nginx/modules/ngx_http_kafka_log_module.so;
http {
kafka_log_kafka_brokers kafka1:9092,kafka2:9092,kafka3:9092;
server {
listen 443 ssl;
ssl_certificate /etc/nginx/certs/your_cert.crt;
ssl_certificate_key /etc/nginx/certs/your_cert_key.key;
if ($request_uri ~* ^/(.*)$) {
set $request_key $1;
}
location / {
kafka_log kafka:$request_key $request_body;
echo_read_request_body;
}
}
}
:
:
ngx_http_echo_module.so
proxy_pass
,fastcgi_pass
,uwsgi_pass
scgi_pass
;
ngx_http_kafka_log_module.so — Nginx Kafka.
kafka_log_kafka_brokers — Kafka.
http c server,
$request_uri
. ,“/”
$request_uri
,rewrite
—return
echo_read_request_body.$request_key
. — /topic_name, — topic_name.
location :
kafka_log — Kafka ;
echo_read_request_body— ,
$request_body
.
— Kafka, URL https://example.com/topic_name
P.S. , . Kafka.