Skip to content

Commit 830599c

Browse files
committed
SCGI: ensure HTTP_HOST is set to the requested target host.
When using HTTP/2 or prior the CGI/1.1 HTTP_HOST environment variable is set to the requested target host. However with HTTP/3 (or with HTTP/1.1 with the host contained in the request line) this was not happening. The HTTP/2 module uses the ':authority' pseudo-header field to set http_host. It was decided not to do that for HTTP/3. Instead we create a *new* default for http_host which will now use the HOST request header or :authority pseudo-header field. While this is a slight change in behaviour in regards to passing HTTP request header fields, it should be fine in practice as the HTTP host request header and the :authority pseudo-header field should be the same. Also the CGI specification (RFC 3875, 4.1.18) notes The server SHOULD set meta-variables specific to the protocol and scheme for the request. Interpretation of protocol-specific variables depends on the protocol version in SERVER_PROTOCOL. Link: <https://datatracker.ietf.org/doc/html/rfc3875#section-4.1.18>
1 parent ac96b27 commit 830599c

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/http/modules/ngx_http_scgi_module.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,13 @@ static ngx_str_t ngx_http_scgi_hide_headers[] = {
453453
};
454454

455455

456+
static ngx_keyval_t ngx_http_scgi_headers[] = {
457+
{ ngx_string("HTTP_HOST"),
458+
ngx_string("$host$is_request_port$request_port") },
459+
{ ngx_null_string, ngx_null_string }
460+
};
461+
462+
456463
#if (NGX_HTTP_CACHE)
457464

458465
static ngx_keyval_t ngx_http_scgi_cache_headers[] = {
@@ -1675,7 +1682,8 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
16751682
conf->params_source = prev->params_source;
16761683
}
16771684

1678-
rc = ngx_http_scgi_init_params(cf, conf, &conf->params, NULL);
1685+
rc = ngx_http_scgi_init_params(cf, conf, &conf->params,
1686+
ngx_http_scgi_headers);
16791687
if (rc != NGX_OK) {
16801688
return NGX_CONF_ERROR;
16811689
}

0 commit comments

Comments
 (0)