mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05:00 
			
		
		
		
	Merge pull request #909 from evermax/master
Test that the host header forwarding on proxy
This commit is contained in:
		
						commit
						32329a473d
					
				@ -31,7 +31,7 @@ func testPool() HostPool {
 | 
				
			|||||||
			Name: workableServer.URL, // this should resolve (healthcheck test)
 | 
								Name: workableServer.URL, // this should resolve (healthcheck test)
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Name: "http://shouldnot.resolve", // this shouldn't
 | 
								Name: "http://localhost:99998", // this shouldn't
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Name: "http://C",
 | 
								Name: "http://C",
 | 
				
			||||||
 | 
				
			|||||||
@ -576,6 +576,72 @@ func TestMultiReverseProxyFromClient(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestHostSimpleProxyNoHeaderForward(t *testing.T) {
 | 
				
			||||||
 | 
						var requestHost string
 | 
				
			||||||
 | 
						backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
							requestHost = r.Host
 | 
				
			||||||
 | 
							w.Write([]byte("Hello, client"))
 | 
				
			||||||
 | 
						}))
 | 
				
			||||||
 | 
						defer backend.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set up proxy
 | 
				
			||||||
 | 
						p := &Proxy{
 | 
				
			||||||
 | 
							Next:      httpserver.EmptyNext, // prevents panic in some cases when test fails
 | 
				
			||||||
 | 
							Upstreams: []Upstream{newFakeUpstream(backend.URL, false)},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						r, err := http.NewRequest("GET", "/", nil)
 | 
				
			||||||
 | 
						r.Host = "test.com"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to create request: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						w := httptest.NewRecorder()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						p.ServeHTTP(w, r)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !strings.Contains(backend.URL, "//") {
 | 
				
			||||||
 | 
							t.Fatalf("The URL of the backend server doesn't contains //: %s", backend.URL)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						expectedHost := strings.Split(backend.URL, "//")
 | 
				
			||||||
 | 
						if expectedHost[1] != requestHost {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %s as a Host header got %s\n", expectedHost[1], requestHost)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestHostHeaderReplacedUsingForward(t *testing.T) {
 | 
				
			||||||
 | 
						var requestHost string
 | 
				
			||||||
 | 
						backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
							requestHost = r.Host
 | 
				
			||||||
 | 
							w.Write([]byte("Hello, client"))
 | 
				
			||||||
 | 
						}))
 | 
				
			||||||
 | 
						defer backend.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						upstream := newFakeUpstream(backend.URL, false)
 | 
				
			||||||
 | 
						proxyHostHeader := "test2.com"
 | 
				
			||||||
 | 
						upstream.host.UpstreamHeaders = http.Header{"Host": []string{proxyHostHeader}}
 | 
				
			||||||
 | 
						// set up proxy
 | 
				
			||||||
 | 
						p := &Proxy{
 | 
				
			||||||
 | 
							Next:      httpserver.EmptyNext, // prevents panic in some cases when test fails
 | 
				
			||||||
 | 
							Upstreams: []Upstream{upstream},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						r, err := http.NewRequest("GET", "/", nil)
 | 
				
			||||||
 | 
						r.Host = "test.com"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to create request: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						w := httptest.NewRecorder()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						p.ServeHTTP(w, r)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if proxyHostHeader != requestHost {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %s as a Host header got %s\n", proxyHostHeader, requestHost)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newFakeUpstream(name string, insecure bool) *fakeUpstream {
 | 
					func newFakeUpstream(name string, insecure bool) *fakeUpstream {
 | 
				
			||||||
	uri, _ := url.Parse(name)
 | 
						uri, _ := url.Parse(name)
 | 
				
			||||||
	u := &fakeUpstream{
 | 
						u := &fakeUpstream{
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user