nginx非http端口重定向

nginx non http port redirection

客户中有一台运行 nginx 的服务器、来自 saltstack 的 salt master 守护进程和一个执行秘密操作的秘密网络应用程序。

注意事项:

该客户在其他地方有一台机器,确实需要连接到盐,互联网连接由一个秘密组织提供,他们只允许连接到端口 80,无法协商。

我的问题:

是否可以使用nginx将另一个domain.example.com80端口重定向到6453端口?我尝试了以下方法:

server {                                                                                                                                         
    listen 80;                                                                                                                               
    server_name otherdomain.example.com;                                                                                                       
    proxy_pass 127.0.0.1:6453;                                                                                                                   
}   

但这并不像预期的那样有效。有可能的?有一些方法可以使用 nginx 来做到这一点?

我从日志中得到的错误是:

"proxy_pass" directive is not allowed here

proxy_pass 需要 specified within a location context,并且基本上是 Web 事物。它只有在网络 headers 被发送和解释后才会发挥作用。

像您想要完成的事情通常使用 HAProxy in tcp mode, although there is a tcp proxy module 来完成,它也做类似的事情。

但是,我认为您不会非常成功,因为 ZMQ 不参​​与可以轻松区分网络请求的协议(HTTP 主机:headers) non-web 请求(来自同一端口)。

我的建议是找到某种方法为此使用另一个端口,第二个 IP 地址,或者编写一个棘手的 TCP 代理程序来识别传入的 HTTP and/or ZMQ 连接并将它们透明地转发到正确的本地端口。