Sim, se o nginx foi compilado com --with-stream
. link
Aqui está um dos exemplos com a mesma porta:
upstream stream_backend {
hash $remote_addr;
server backend1.example.com:12345;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
Segunda atualização:
Você obviamente não pode fazer algo assim:
stream {
upstream db1.example.com {
server db1.example.com:3306;
#server_name db1.example.com; "server_name" directive is not allowed here
}
upstream db2.example.com {
server db2.example.com:3306;
}
server {
listen 3306;
proxy_pass db1.example.com;
}
#duplicate "3306" address and port pair
#server { listen 3306; proxy_pass db2.example.com; }
}
Como o proxy nginx para upstream db1.example.com
está competindo com db2.example.com
para pacotes na porta 3306. Portanto, você precisa ter o proxy para db1.example.com listen
ing em outro port
do que o proxy para %código%. Caso contrário, o nginx não saberia rotear os pacotes de e para os dois upstreams. Desculpas por entender mal sua postagem original. db2.example.com
não é permitido nas definições de fluxo porque, diferentemente dos cabeçalhos http, não há metadados adicionais no pacote tcp / udp que identifiquem qual DNS foi usado para endereçar o pacote ao nginx.