Continuing issues with limit_conn

Calomel nginxlist at calomel.org
Tue Apr 29 07:29:08 MSD 2008


Stuart,

Building Nginx 0.6.29, we are also _unable_ to get limit_zone/limit_conn to
work as expected.

As a test we setup the relative lines in the http and server sections. Nginx
should only accept ONE concurrent connection for any single ip address.  

http{
  limit_zone gulag $binary_remote_addr 1m;
    server{
      limit_conn gulag 1;
    }
}

When I run "ab -c 50 -n 10000 http://testbox/" the server answers all
requests with response code 200. As you mentioned, this is _not_ the
expected behavior.

Perhaps we are missing something? The code could be at fault or perhaps
something has been omitted from the Wiki and the documentation. If there is
a proper solution I will make sure to document it.


My working test configuration and full explanations can be found here:

  Nginx "how to" - Fast, Secure and Efficient Web Server
  http://calomel.org/nginx.html

--
  Calomel @ http://calomel.org
  Open Source Research and Reference


On Mon, Apr 28, 2008 at 06:09:24PM -0700, Stuart McKim wrote:
>I'm still unable to get limit_conn to work as expected, despite reading
>as much documentation as I can find, of which there seems to be very
>little.
>
>In the http section of /etc/nginx/nginx.conf I have the two lines
>    limit_zone test-limit $binary_remote_addr 10m;
>    limit_conn test-limit 15;
>
>The debug output from the error log, with line numbers added, is:
>01  2008/04/28 16:06:51 [debug] 19050#0: *15 write new buf t:1 f:0 080F3778, pos 080F3778, size: 240 file: 0, size: 0
>02  2008/04/28 16:06:51 [debug] 19050#0: *15 http write filter: l:0 f:0 s:240
>03  2008/04/28 16:06:51 [debug] 19050#0: *15 http output filter "/webtest.html?"
>04  2008/04/28 16:06:51 [debug] 19050#0: *15 copy filter: "/webtest.html?"
>05  2008/04/28 16:06:51 [debug] 19050#0: *15 http postpone filter "/webtest.html?" BFEA3E58
>06  2008/04/28 16:06:51 [debug] 19050#0: *15 http postpone filter out "/webtest.html?"
>07  2008/04/28 16:06:51 [debug] 19050#0: *15 write old buf t:1 f:0 080F3778, pos 080F3778, size: 240 file: 0, size: 0
>08  2008/04/28 16:06:51 [debug] 19050#0: *15 write new buf t:0 f:1 00000000, pos 00000000, size: 0 file: 0, size: 212
>09  2008/04/28 16:06:51 [debug] 19050#0: *15 http write filter: l:1 f:0 s:452
>10  2008/04/28 16:06:51 [debug] 19050#0: *15 http write filter limit 0
>11  2008/04/28 16:06:51 [debug] 19050#0: *15 tcp_nopush
>12  2008/04/28 16:06:51 [debug] 19050#0: *15 writev: 240
>13  2008/04/28 16:06:51 [debug] 19050#0: *15 sendfile: @0 212
>14  2008/04/28 16:06:51 [debug] 19050#0: *15 sendfile: 212, @0 212:212
>15  2008/04/28 16:06:51 [debug] 19050#0: *15 http write filter 00000000
>16  2008/04/28 16:06:51 [debug] 19050#0: *15 copy filter: 0 "/webtest.html?"
>17  2008/04/28 16:06:51 [debug] 19050#0: *15 http finalize request: 0, "/webtest.html?"
>18  2008/04/28 16:06:51 [debug] 19050#0: *15 set http keepalive handler
>19  2008/04/28 16:06:51 [debug] 19050#0: *15 http close request
>20  2008/04/28 16:06:51 [debug] 19050#0: *15 http log handler
>21  2008/04/28 16:06:51 [debug] 19050#0: *15 run cleanup: 080F3674
>22  2008/04/28 16:06:51 [debug] 19050#0: *15 file cleanup: fd:58
>23  2008/04/28 16:06:51 [debug] 19050#0: *15 run cleanup: 080F363C
>24  2008/04/28 16:06:51 [debug] 19050#0: *15 free: 080F3178, unused: 2091
>25  2008/04/28 16:06:51 [debug] 19050#0: *15 event timer add: 23: 75000:2538275930
>26  2008/04/28 16:06:51 [debug] 19050#0: *15 free: 080B7770
>27  2008/04/28 16:06:51 [debug] 19050#0: *15 free: 080F2D70
>28  2008/04/28 16:06:51 [debug] 19050#0: *15 hc free: 00000000 0
>29  2008/04/28 16:06:51 [debug] 19050#0: *15 hc busy: 00000000 0
>30  2008/04/28 16:06:51 [debug] 19050#0: *15 http keepalive handler
>31  2008/04/28 16:06:51 [debug] 19050#0: *15 malloc: 080F2D70:1024
>32  2008/04/28 16:06:51 [debug] 19050#0: *15 recv: fd:23 -1 of 1024
>33  2008/04/28 16:06:51 [debug] 19050#0: *15 recv() not ready (11: Resource temporarily unavailable)
>34  2008/04/28 16:06:51 [debug] 19050#0: *16 malloc: 080B7770:632
>35  2008/04/28 16:06:51 [debug] 19050#0: *16 malloc: 080F3178:1024
>36  2008/04/28 16:06:51 [debug] 19050#0: *16 malloc: 080F3580:4096
>37  2008/04/28 16:06:51 [debug] 19050#0: *16 http process request line
>38  2008/04/28 16:06:51 [debug] 19050#0: *16 recv: fd:24 122 of 1024
>39  2008/04/28 16:06:51 [debug] 19050#0: *16 http request line: "GET /webtest.html HTTP/1.0"
>40  2008/04/28 16:06:51 [debug] 19050#0: *16 http uri: "/webtest.html"
>41  2008/04/28 16:06:51 [debug] 19050#0: *16 http args: ""
>42  2008/04/28 16:06:51 [debug] 19050#0: *16 http exten: "html"
>43  2008/04/28 16:06:51 [debug] 19050#0: *16 http process request header line
>44  2008/04/28 16:06:51 [debug] 19050#0: *16 http header: "User-Agent: ApacheBench/1.3d"
>45  2008/04/28 16:06:51 [debug] 19050#0: *16 http header: "Connection: Keep-Alive"
>46  2008/04/28 16:06:51 [debug] 19050#0: *16 http header: "Host: mckim1.osuosl.org"
>47  2008/04/28 16:06:51 [debug] 19050#0: *16 http header: "Accept: */*"
>48  2008/04/28 16:06:51 [debug] 19050#0: *16 http header done
>49  2008/04/28 16:06:51 [debug] 19050#0: *16 event timer del: 24: 2538800922
>50  2008/04/28 16:06:51 [debug] 19050#0: *16 find location for "/webtest.html"
>51  2008/04/28 16:06:51 [debug] 19050#0: *16 using configuration ""
>52  2008/04/28 16:06:51 [debug] 19050#0: *16 http cl:-1 max:1048576
>53  2008/04/28 16:06:51 [debug] 19050#0: *16 generic phase: 1
>54  2008/04/28 16:06:51 [debug] 19050#0: *16 add cleanup: 080F3A44
>55  2008/04/28 16:06:51 [debug] 19050#0: *16 limit zone: E1F43BF3 1
>56  2008/04/28 16:06:51 [debug] 19050#0: *16 access phase: 2
>57  2008/04/28 16:06:51 [debug] 19050#0: *16 access phase: 3
>58  2008/04/28 16:06:51 [debug] 19050#0: *16 post access phase: 4
>59  2008/04/28 16:06:51 [debug] 19050#0: *16 content phase: 5
>60  2008/04/28 16:06:51 [debug] 19050#0: *16 content phase: 6
>61  2008/04/28 16:06:51 [debug] 19050#0: *16 content phase: 7
>62  2008/04/28 16:06:51 [debug] 19050#0: *16 http set discard body
>63  2008/04/28 16:06:51 [debug] 19050#0: *16 http filename: "/var/www/nginx/htdocs1/webtest.html"
>64  2008/04/28 16:06:51 [debug] 19050#0: *16 add cleanup: 080F3A7C
>65  2008/04/28 16:06:51 [debug] 19050#0: *16 http static fd: 58
>66  2008/04/28 16:06:51 [debug] 19050#0: *16 HTTP/1.1 200 OK
>67  Server: nginx/0.6.29
>68  Date: Mon, 28 Apr 2008 23:06:51 GMT
>69  Content-Type: text/html
>70  Content-Length: 212
>71  Last-Modified: Fri, 11 Apr 2008 21:43:45 GMT
>72  Connection: keep-alive
>73  Keep-Alive: timeout=20
>74  Accept-Ranges: bytes
>
>This is repeated many times, with the *XX number being the only
>significant change. The "limit zone: E1F43BF3 1" line is always
>identical.
>
>If I do not use the limit_zone and limit_conn lines in my config, or
>exclude just the limit_conn line, the debug output appears to be the
>same except I don't see the lines
>21  2008/04/28 16:06:51 [debug] 19050#0: *15 run cleanup: 080F3674
>54  2008/04/28 16:06:51 [debug] 19050#0: *16 add cleanup: 080F3A44
>55  2008/04/28 16:06:51 [debug] 19050#0: *16 limit zone: E1F43BF3 1
>
>I'm not really sure what I should expect to see in the debug output, but
>it would appear that the module is trying to at least do something.
>
>The catch is that with 1000 connections, in sessions with 50 concurrent
>connections, I'm expecting to see some 503 returns from the server, but
>the server responds with 200 every time. This is not proper behaviour,
>correct? As far as I can tell, this is a bug.
>
>I am using version 0.6.29.
>
>Has anybody had any success with using this module? If so, how did you
>test it?
>
>If more information would be useful, I can provide it.
>
>Thanks,
>Stuart
>
>-- 
>Stuart McKim
>FTP Administrator
>Open Source Lab
>Oregon State University







More information about the nginx mailing list