Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
nghttp2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
nghttp2
Commits
3ddc446b
Commit
3ddc446b
authored
8 years ago
by
Tatsuhiro Tsujikawa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
nghttpx: Enable backend pattern matching with http2-proxy
parent
b72c5f10
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
15 additions
and
30 deletions
+15
-30
src/shrpx.cc
src/shrpx.cc
+5
-3
src/shrpx_client_handler.cc
src/shrpx_client_handler.cc
+7
-6
src/shrpx_config.cc
src/shrpx_config.cc
+0
-13
src/shrpx_https_upstream.cc
src/shrpx_https_upstream.cc
+3
-8
No files found.
src/shrpx.cc
View file @
3ddc446b
...
...
@@ -1543,8 +1543,7 @@ Connections:
with "unix:" (e.g., unix:/var/run/backend.sock).
Optionally, if <PATTERN>s are given, the backend address
is only used if request matches the pattern. If
--http2-proxy is used, <PATTERN>s are ignored. The
is only used if request matches the pattern. The
pattern matching is closely designed to ServeMux in
net/http package of Go programming language. <PATTERN>
consists of path, host + path or just host. The path
...
...
@@ -1559,7 +1558,10 @@ Connections:
request host. If host alone is given, "/" is appended
to it, so that it matches all request paths under the
host (e.g., specifying "nghttp2.org" equals to
"nghttp2.org/").
"nghttp2.org/"). CONNECT method is treated specially.
It does not have path, and we don't allow empty path.
To workaround this, we assume that CONNECT method has
"/" as path.
Patterns with host take precedence over patterns with
just path. Then, longer patterns take precedence over
...
...
This diff is collapsed.
Click to expand it.
src/shrpx_client_handler.cc
View file @
3ddc446b
...
...
@@ -977,18 +977,19 @@ ClientHandler::get_downstream_connection(Downstream *downstream) {
return
make_unique
<
HealthMonitorDownstreamConnection
>
();
}
auto
&
balloc
=
downstream
->
get_block_allocator
();
// Fast path. If we have one group, it must be catch-all group.
// proxy mode falls in this case.
if
(
groups
.
size
()
==
1
)
{
group_idx
=
0
;
}
else
if
(
req
.
method
==
HTTP_CONNECT
)
{
// We don't know how to treat CONNECT request in host-path
// mapping. It most likely appears in proxy scenario. Since we
// have dealt with proxy case already, just use catch-all group.
group_idx
=
catch_all
;
// CONNECT method does not have path. But we requires path in
// host-path mapping. As workaround, we assume that path is "/".
group_idx
=
match_downstream_addr_group
(
routerconf
,
req
.
authority
,
StringRef
::
from_lit
(
"/"
),
groups
,
catch_all
,
balloc
);
}
else
{
auto
&
balloc
=
downstream
->
get_block_allocator
();
if
(
!
req
.
authority
.
empty
())
{
group_idx
=
match_downstream_addr_group
(
routerconf
,
req
.
authority
,
req
.
path
,
groups
,
catch_all
,
balloc
);
...
...
This diff is collapsed.
Click to expand it.
src/shrpx_config.cc
View file @
3ddc446b
...
...
@@ -3554,19 +3554,6 @@ int configure_downstream_group(Config *config, bool http2_proxy,
g
.
addrs
.
push_back
(
std
::
move
(
addr
));
router
.
add_route
(
g
.
pattern
,
addr_groups
.
size
());
addr_groups
.
push_back
(
std
::
move
(
g
));
}
else
if
(
http2_proxy
)
{
// We don't support host mapping in these cases. Move all
// non-catch-all patterns to catch-all pattern.
DownstreamAddrGroupConfig
catch_all
(
StringRef
::
from_lit
(
"/"
));
for
(
auto
&
g
:
addr_groups
)
{
std
::
move
(
std
::
begin
(
g
.
addrs
),
std
::
end
(
g
.
addrs
),
std
::
back_inserter
(
catch_all
.
addrs
));
}
std
::
vector
<
DownstreamAddrGroupConfig
>
().
swap
(
addr_groups
);
// maybe not necessary?
routerconf
=
RouterConfig
{};
router
.
add_route
(
catch_all
.
pattern
,
addr_groups
.
size
());
addr_groups
.
push_back
(
std
::
move
(
catch_all
));
}
// backward compatibility: override all SNI fields with the option
...
...
This diff is collapsed.
Click to expand it.
src/shrpx_https_upstream.cc
View file @
3ddc446b
...
...
@@ -202,7 +202,7 @@ int htp_hdr_valcb(http_parser *htp, const char *data, size_t len) {
namespace
{
void
rewrite_request_host_path_from_uri
(
BlockAllocator
&
balloc
,
Request
&
req
,
const
StringRef
&
uri
,
http_parser_url
&
u
,
bool
http2_proxy
)
{
http_parser_url
&
u
)
{
assert
(
u
.
field_set
&
(
1
<<
UF_HOST
));
// As per https://tools.ietf.org/html/rfc7230#section-5.4, we
...
...
@@ -271,11 +271,7 @@ void rewrite_request_host_path_from_uri(BlockAllocator &balloc, Request &req,
}
}
if
(
http2_proxy
)
{
req
.
path
=
path
;
}
else
{
req
.
path
=
http2
::
rewrite_clean_path
(
balloc
,
path
);
}
req
.
path
=
http2
::
rewrite_clean_path
(
balloc
,
path
);
}
}
// namespace
...
...
@@ -384,8 +380,7 @@ int htp_hdrs_completecb(http_parser *htp) {
req
.
scheme
=
StringRef
::
from_lit
(
"http"
);
}
}
else
{
rewrite_request_host_path_from_uri
(
balloc
,
req
,
req
.
path
,
u
,
config
->
http2_proxy
&&
!
faddr
->
alt_mode
);
rewrite_request_host_path_from_uri
(
balloc
,
req
,
req
.
path
,
u
);
}
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment