Server_name within tcp server blocks

Hi guys,

I have the following tcp server block in my nginx.conf

stream {
upstream kafka_producer {

    server kafka.service.consul:9092;
}

server {
    listen 9092;
    server_name kafka.stream.mycompany.com;
    proxy_connect_timeout 10s;
    proxy_timeout 30s;
    proxy_pass kafka_producer;
}

}

I would like that my kafka tcp stream is accessible using only the
kafka.stream.mycompany.com:9092 address…just in the same way that it
works with http server blocks.

However I get the following error regarding the server_name:

“server_name” directive is not allowed here in /etc/nginx/nginx.conf

So who knows how I can simulate server_name within tcp server blocks?

Thanks!

TCP has no concept of server names, so this is not possible. It only
works
in HTTP because the client sends the hostname it is trying to access as
part of the request, allowing nginx to match it to a specific server
block.

On Wed, Dec 2, 2015 at 12:31 PM, Charles Nnamdi Akalugwu <

Richard S. Wrote:

TCP has no concept of server names, so this is not possible. It only
works
in HTTP because the client sends the hostname it is trying to access
as

To put into better wording,
The ‘hostname’ technique has 2 parts, part 1 is a receiver (nginx)
receiving
a request containing a hostname which it can match (or not) to an item
in
its configuration, and part 2 the DNS name where this name is recorded
against its IP address. With stream{} you can only rely on part 2.

Posted at Nginx Forum: