<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Maxim,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Is HTTP Pipelining supported in NGINX? How can I pipeline requests?</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I have the following configuration:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
location /auth {
<div>                internal;                </div>
<div>                proxy_connect_timeout 5000ms;</div>
<div>                proxy_read_timeout    5000ms;</div>
<div>                proxy_http_version 1.1;</div>
<div>                proxy_set_header Connection "keep-alive";</div>
<div>                proxy_pass http://ext-authz-upstream-server;</div>
<div>        }</div>
<div>    }</div>
<div><br>
</div>
<div>    upstream ext-authz-upstream-server {</div>
<div>                server 172.20.10.6:9006; </div>
<div>                keepalive 4;</div>
    }<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
However, when I create 100 simultaneous connections, they are all sent via a different source port which means that a new socket connection is created everytime. How can I pipeline requests over 4 connections with keepalive configuration set to 4?</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Devashi</div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> nginx-devel <nginx-devel-bounces@nginx.org> on behalf of Maxim Dounin <mdounin@mdounin.ru><br>
<b>Sent:</b> Wednesday, December 29, 2021 8:07 PM<br>
<b>To:</b> nginx-devel@nginx.org <nginx-devel@nginx.org><br>
<b>Subject:</b> Re: Using single persistent socket to send subrequests</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">Hello!<br>
<br>
On Wed, Dec 29, 2021 at 06:30:11AM +0000, Devashi Tandon wrote:<br>
<br>
> We have a auth module in our code that sends requests to a <br>
> server and waits for response to approve the request before <br>
> proceeding to forward the request to a proxy server.<br>
> <br>
> We use the function ngx_http_post_request to post the <br>
> subrequest.<br>
> <br>
> As I understand, this function adds the request to a queue which <br>
> is then processed by ngx_http_run_posted_requests function.<br>
> <br>
> We observe that every single subrequest is sent over a new <br>
> socket connection. Unfortunately, when we scale to more than <br>
> 1000 concurrent subrequests, we start seeing socket failures.<br>
> <br>
> Is there a way to specify to this function, to maintain a <br>
> persistent socket connection with the auth server and reuse the <br>
> same socket connection for sending multiple subrequests?<br>
<br>
In no particular order:<br>
<br>
- Using ngx_http_post_request() directly might not be a good idea.  <br>
  Consider using ngx_http_subrequest() instead.<br>
<br>
- For the particular task there is the auth_request module <br>
  (<a href="https://nginx.org/en/docs/http/ngx_http_auth_request_module.html">https://nginx.org/en/docs/http/ngx_http_auth_request_module.html</a>). 
<br>
  It might be a good idea to use it instead of rolling your own <br>
  module.<br>
<br>
- Every subrequest is processed according to the configuration <br>
  specified in the configuration file, much like any other <br>
  request.  To use persistent connections to upstream servers you <br>
  have to configure nginx to do so as usual, see <br>
  <a href="http://nginx.org/r/keepalive">http://nginx.org/r/keepalive</a>.<br>
<br>
Hope this helps.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-devel mailing list<br>
nginx-devel@nginx.org<br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br>
</div>
</span></font></div>
</body>
</html>