diff --git a/lib/reverse_proxy/client.rb b/lib/reverse_proxy/client.rb index 84e4f7d..00172c9 100644 --- a/lib/reverse_proxy/client.rb +++ b/lib/reverse_proxy/client.rb @@ -49,13 +49,18 @@ module ReverseProxy source_request = Rack::Request.new(env) # We can pass in a custom path - uri = Addressable::URI.parse("#{url}#{options[:path] || env['ORIGINAL_FULLPATH']}") + uri = Addressable::URI.parse(self.url) + prefix_path = uri.request_uri + path = "#{prefix_path}#{options[:path] || env['ORIGINAL_FULLPATH']}" + if path.blank? + path = "/" + end # Define headers target_request_headers = extract_http_request_headers(source_request.env).merge(options[:headers]) # Initialize request - target_request = Net::HTTP.const_get(source_request.request_method.capitalize).new(uri.request_uri, target_request_headers) + target_request = Net::HTTP.const_get(source_request.request_method.capitalize).new(path, target_request_headers) # Basic auth target_request.basic_auth(options[:username], options[:password]) if options[:username] and options[:password] @@ -85,7 +90,8 @@ module ReverseProxy http_options.merge!(options[:http]) if options[:http] # Make the request - Net::HTTP.start(uri.hostname, uri.port, http_options) do |http| + hostname = self.url.starts_with?("unix://") ? uri.to_s : uri.hostname + NetX::HTTPUnix.start(hostname, uri.port, http_options) do |http| callbacks[:on_connect].call(http) target_response = http.request(target_request) end