<div dir="ltr"><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 28, 2019 at 9:33 PM yoav.cohen <<a href="mailto:nginx-forum@forum.nginx.org" target="_blank">nginx-forum@forum.nginx.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear experts,<br>
<br>
We are evaluating nginx as a platform for the product of our new startup<br>
company.<br>
<br>
Our use-case requires a TCP proxy that will terminate TLS, which nginx<br>
handles very well. However, we need to be able to send all TCP traffic to<br>
another process for offline processing.<br>
<br>
Initially we thought we could write a NGX_STREAM_MODULE (call it tcp_mirror)<br>
that will be able to read both the downstream bytes (client <--> nginx) and<br>
upstream bytes (proxy <--> server) and send them to another process, but<br>
after looking at a few module examples and trying out a few things we<br>
understood that we can only use a single content handler for each stream<br>
configuration. <br>
<br>
For example, we were hoping the following mock configuration would work for<br>
us, but realized we can't have both proxy_pass and tcp_mirror under server<br>
because there can be only one content handler:<br>
stream {<br>
    server {<br>
        listen     12346;<br>
        proxy_pass <a href="http://backend.example.com:12346" rel="noreferrer" target="_blank">backend.example.com:12346</a>;<br>
        tcp_mirror <a href="http://processor.acme.com:6666" rel="noreferrer" target="_blank">processor.acme.com:6666</a>;<br>
    }<br>
}<br>
<br>
The above led us to the conclusion that in order to implement our use-case<br>
we would have to write a new proxy_pass module, more specifically we would<br>
have to re-write ngx_stream_proxy_module.c. The idea is that we would manage<br>
two upstreams, the server and the processor. The configuration would look<br>
something like this:<br>
stream {<br>
    server {<br>
        listen     12346;<br>
        proxy_pass_mirror <a href="http://backend.example.com:12346" rel="noreferrer" target="_blank">backend.example.com:12346</a><br>
<a href="http://processor.acme.com:6666" rel="noreferrer" target="_blank">processor.acme.com:6666</a>;<br>
    }<br>
}<br>
<br>
Before we begin implementation of this design, we wanted to consult with the<br>
experts here and understand whether anyone has a better idea on how to<br>
implement our use-case on top of nginx.<br>
<br>
Thanks in advance,<br>
Yoav Cohen.<br>
<br></blockquote><div><br></div><div>Have you tried <a href="http://nginx.org/en/docs/http/ngx_http_mirror_module.html">http://nginx.org/en/docs/http/ngx_http_mirror_module.html</a> ?</div><div><br></div><div>Regards,<br></div><div>Marcin Wanat<br> </div></div>
</div>