Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#897 closed defect (invalid)

$pipe variable never set

Reported by: mqudsi.neosmart.net@… Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.9.x
Keywords: pipe Cc:
uname -a: FreeBSD 10.2-RELEASE FreeBSD 10.2-RELEASE #0 r286666: Wed Aug 12 15:26:37 UTC 2015 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
nginx -V: nginx version: nginx/1.9.11
built with LibreSSL 2.1.9
TLS SNI support enabled
configure arguments: --prefix=/usr/local/etc/nginx --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx/access.log --user=www-data --group=www-data --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_v2_module --with-http_sub_module --add-module=../ngx_cache_purge --with-http_image_filter_module --with-http_gunzip_module --with-file-aio --with-ipv6 --with-openssl=../libressl-2.1.9 --with-pcre --with-pcre-jit --with-threads --with-google_perftools_module --with-zlib=../zlib/ --with-zlib-asm=pentium4 --with-cc-opt=' -Wno-error -Ofast -funroll-loops -march=native' --with-zlib-opt=-march=native

Description

The $pipe variable, documented at http://nginx.org/en/docs/http/ngx_http_core_module.html#variables is never being set to anything other than "."

According to the documentation:

“p” if request was pipelined, “.” otherwise (1.3.12, 1.2.7)

As I understand it, HTTP 1.1 requests with keepalive, HTTP 1.0 requets with manual "Connection: keep-alive", and HTTP 2.0 connections with h2 idle support enabled should all result in requests with $pipe = p

However, for all three of these cases when logging $pipe in access_log, the result is always "."

Change History (2)

comment:1 by Maxim Dounin, 4 years ago

Resolution: invalid
Status: newclosed

The $pipe variable works as expected (return 200 $pipe is used in the configuration):

$ telnet localhost 8080
GET / HTTP/1.1
Host: x

GET / HTTP/1.1
Host: x

HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Tue, 09 Feb 2016 18:38:03 GMT
Content-Type: application/octet-stream
Content-Length: 2
Connection: keep-alive

.
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Tue, 09 Feb 2016 18:38:03 GMT
Content-Type: application/octet-stream
Content-Length: 2
Connection: keep-alive

p

Note that pipelining and keepalive are different things. Quoting RFC2616:

      - HTTP requests and responses can be pipelined on a connection.
        Pipelining allows a client to make multiple requests without
        waiting for each response, allowing a single TCP connection to
        be used much more efficiently, with much lower elapsed time.

While pipelining requires keepalive, the use of keepalive doesn't mean that pipelining is used too. Moreover, clients usually use keepalive, but do not use pipelining due to various interoperability problems.

In HTTP/2 pipelining is not present at all. It instead uses stream multiplexing which allows to achieve similar goals.

More details about pipelining can be found in RFC2616.

comment:2 by mqudsi.neosmart.net@…, 4 years ago

Thanks and my apologies.

Note: See TracTickets for help on using tickets.