We released nghttp2 v1.1.1.
We should have written this blog after v1.1.0 was released, but we found some memory leaks in nghttpx, and while tracing this, we have found another issue. Although these issues have existed well before v1.1.0, we decided to fix these issues, and make an another release.
As a result, v1.1.0 became very short term release, but it contains many changes, so we describe changes since v1.0.5 here.
First thing first, the bug fixes in libnghttp2 library. We found bug which causes receive window exhaustion if automatic flow control feature is disabled, and peer sends illegal HTTP message body.
Gabi Davar kindly offered a patch to enhance msvc build and python setup script.
Klaus Ziegler sent us a patch to compile nghttp2 with IRIX gcc-4.7.
nghttp now gets --max-concurrent-streams
option to control the
concurrency. Regarding nghttp, acesso sent us a patch to add comment
on HAR on pushed objects.
We fixed memory leaks and stability issues in nghttpx.
nghttpx now supports backend routing based on request host and path by
extending -b
option. The detailed syntax is explained in
nghttpx man page.
The routing pattern is very similar to ServeMux in net/http package
from Go programming language. For example, if we want to route
request to “/httpbin/” to 127.0.0.1 port 8000, and rest of the
requests to 127.0.0.1 port 8081, we can write configuration file like
so:
1 2 |
|
The second rule above is equivalent to 127.0.0.1,8001;/
, which
matches all request paths. This is called catch-all pattern, and
nghttpx requires this catch-all pattern.
You can use also request host to route request:
1 2 |
|
All requests whose host header field (:authority header field for HTTP/2) are routed to 127.0.0.1 port 8000, and all requests for blog.example.org are routed to 127.0.0.1 port 8080.
This host-path based routing is available for both HTTP/1 and HTTP/2
backend (in other words, it is enabled in default mode,
--http2-bridge
and --client
). It is disabled if -s
or -p
is
given.
nghttpx also gets --include
option to include configurations from
another file. This is useful to share configurations between
different nghttpx instances. The accesslog format variable now can be
enclosed with curly braces for disambiguation (e.g.,
${remote_addr}
). SSL/TLS related log variables, such as TLS
protocol version, ciphers, etc, have been also added.
h2load gets --cipher
option to specify specific cipher suites to
use.