mirror of
https://github.com/apache/httpd.git
synced 2025-08-15 23:27:39 +00:00
*) mod_proxy_http2: fix X-Forward-Host
header to carry the correct value.
Fixed PR66752. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1912180 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -1,20 +1,25 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import json
|
||||
|
||||
resp = {
|
||||
'https': os.getenv('HTTPS', ''),
|
||||
'host': os.getenv('X_HOST', '') if 'X_HOST' in os.environ else os.getenv('SERVER_NAME', ''),
|
||||
'server': os.getenv('SERVER_NAME', ''),
|
||||
'h2_original_host': os.getenv('H2_ORIGINAL_HOST', ''),
|
||||
'port': os.getenv('SERVER_PORT', ''),
|
||||
'protocol': os.getenv('SERVER_PROTOCOL', ''),
|
||||
'ssl_protocol': os.getenv('SSL_PROTOCOL', ''),
|
||||
'h2': os.getenv('HTTP2', ''),
|
||||
'h2push': os.getenv('H2PUSH', ''),
|
||||
'h2_stream_id': os.getenv('H2_STREAM_ID', ''),
|
||||
'x-forwarded-for': os.getenv('HTTP_X_FORWARDED_FOR', ''),
|
||||
'x-forwarded-host': os.getenv('HTTP_X_FORWARDED_HOST', ''),
|
||||
'x-forwarded-server': os.getenv('HTTP_X_FORWARDED_SERVER', ''),
|
||||
}
|
||||
|
||||
print("Content-Type: application/json")
|
||||
print()
|
||||
print("{")
|
||||
print(" \"https\" : \"%s\"," % (os.getenv('HTTPS', '')))
|
||||
print(" \"host\" : \"%s\"," % (os.getenv('X_HOST', '') \
|
||||
if 'X_HOST' in os.environ else os.getenv('SERVER_NAME', '')))
|
||||
print(" \"server\" : \"%s\"," % (os.getenv('SERVER_NAME', '')))
|
||||
print(" \"h2_original_host\" : \"%s\"," % (os.getenv('H2_ORIGINAL_HOST', '')))
|
||||
print(" \"port\" : \"%s\"," % (os.getenv('SERVER_PORT', '')))
|
||||
print(" \"protocol\" : \"%s\"," % (os.getenv('SERVER_PROTOCOL', '')))
|
||||
print(" \"ssl_protocol\" : \"%s\"," % (os.getenv('SSL_PROTOCOL', '')))
|
||||
print(" \"h2\" : \"%s\"," % (os.getenv('HTTP2', '')))
|
||||
print(" \"h2push\" : \"%s\"," % (os.getenv('H2PUSH', '')))
|
||||
print(" \"h2_stream_id\" : \"%s\"" % (os.getenv('H2_STREAM_ID', '')))
|
||||
print("}")
|
||||
print(json.JSONEncoder(indent=2).encode(resp))
|
||||
|
||||
|
@ -136,6 +136,28 @@ class TestH2Proxy:
|
||||
else env.http_port2
|
||||
assert int(r.json[1]["port"]) == exp_port
|
||||
|
||||
# test X-Forwarded-* headers
|
||||
def test_h2_600_06(self, env):
|
||||
conf = H2Conf(env, extras={
|
||||
f'cgi.{env.http_tld}': [
|
||||
"SetEnvIf Host (.+) X_HOST=$1",
|
||||
f"ProxyPreserveHost on",
|
||||
f"ProxyPass /h2c/ h2c://127.0.0.1:{env.http_port}/",
|
||||
f"ProxyPass /h1c/ http://127.0.0.1:{env.http_port}/",
|
||||
]
|
||||
})
|
||||
conf.add_vhost_cgi(proxy_self=True)
|
||||
conf.install()
|
||||
assert env.apache_restart() == 0
|
||||
url = env.mkurl("https", "cgi", "/h1c/hello.py")
|
||||
r1 = env.curl_get(url, 5)
|
||||
assert r1.response["status"] == 200
|
||||
url = env.mkurl("https", "cgi", "/h2c/hello.py")
|
||||
r2 = env.curl_get(url, 5)
|
||||
assert r2.response["status"] == 200
|
||||
for key in ['x-forwarded-for', 'x-forwarded-host','x-forwarded-server']:
|
||||
assert r1.json[key] == r2.json[key], f'{key} differs proxy_http != proxy_http2'
|
||||
|
||||
# lets do some error tests
|
||||
def test_h2_600_30(self, env):
|
||||
conf = H2Conf(env)
|
||||
|
Reference in New Issue
Block a user