From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Reichelt Subject: Re: gitweb: false base href sent when integrated via reverse proxy and path_info is active Date: Sun, 28 Nov 2010 21:30:38 +0100 Message-ID: <4CF2BBEE.2050808@nachtgeist.net> References: <20101128081048.13668.67286.reportbug@sb74.startrek> <20101128162720.GB18335@burratino> <201011281847.40233.jnareb@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Giuseppe Bilotta , Jonathan Nieder , git@vger.kernel.org To: Jakub Narebski X-From: git-owner@vger.kernel.org Sun Nov 28 21:39:59 2010 Return-path: Envelope-to: gcvg-git-2@lo.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PMo2Q-0002j7-HB for gcvg-git-2@lo.gmane.org; Sun, 28 Nov 2010 21:39:59 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752021Ab0K1Ujx (ORCPT ); Sun, 28 Nov 2010 15:39:53 -0500 Received: from srv04.jarevo.de ([88.198.54.146]:62362 "EHLO srv04.jarevo.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751772Ab0K1Ujw (ORCPT ); Sun, 28 Nov 2010 15:39:52 -0500 X-Greylist: delayed 550 seconds by postgrey-1.27 at vger.kernel.org; Sun, 28 Nov 2010 15:39:51 EST Received: from localhost (localhost [127.0.0.1]) by srv04.jarevo.de (Postfix) with ESMTP id 8F9823071; Sun, 28 Nov 2010 21:30:39 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at srv04.jarevo.de Received: from srv04.jarevo.de ([127.0.0.1]) by localhost (srv04.jarevo.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vAeaeZn-GH5k; Sun, 28 Nov 2010 21:30:39 +0100 (CET) Received: from [10.0.0.1] (localhost [127.0.0.1]) by srv04.jarevo.de (Postfix) with ESMTPA id 91F373070; Sun, 28 Nov 2010 21:30:38 +0100 (CET) User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.15) Gecko/20101030 Icedove/3.0.10 In-Reply-To: <201011281847.40233.jnareb@gmail.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Hi all >> I'm not familiar with the way reverse proxies operate. Is there some >> information that the script can scrape to understand that its request >> is being reverse-proxied? Nope. Reverse proxy works like this: - a "public" apache VirtualHost receives an http(s) request for a certain URL /a/b/c... and has the location /a/.* configured as a revProxy location - the public vhost repeats that request to the revProxy target - the revProxy target receives a request from the "public" vhost and serves it as usual (this is were the gitweb.cgi script actually is run, only seeing the request made by the public vhost, not the initially requesting client, thus all information about the publicly visible git URI is lost and never gets passed on to gitweb.cgi) - the public vhost receives the response and forwards it to the client, pretending he himself had answered the request >> Lacking that, a plain >> >> our $base_url = 'whatever'; >> >> in the gitweb config should probably work Nope again, I'm afraid it doesn't (see further down) > See also gitweb/README, the "Gitweb config file variables" section: > > * $base_url > Base URL for relative URLs in pages generated by gitweb, > (e.g. $logo, $favicon, @stylesheets if they are relative URLs), > needed and used only for URLs with nonempty PATH_INFO via > . Usually gitweb sets its value correctly, > ^^^^^^^ > and there is no need to set this variable, e.g. to $my_uri or "/". > > The key word here is "usually" ;-) > *oops* thank you all for the hint! I totally missed that. However, I just tried that and it failed. $base_url gets ignored in gitweb.conf and even setting $my_url and $my_uri in gitweb.conf seems to have no effect at all. For testing purposes I printed the relevant variables to the html header: gitweb.conf: ************ our $feature{'pathinfo'}{'default'} = [1]; our $base_url = "https://foobar"; our $my_url = "https://foo"; our $my_uri = "https://bar"; ************ gitweb.cgi:3424 ************ # the stylesheet, favicon etc urls won't work correctly with path_info # unless we set the appropriate base URL if ($ENV{'PATH_INFO'}) { print "\n"; } print ""; ************ - git repo listing public url: https://sb74/projects/gitweb revProxy url: https://localhost:446/projects/gitweb ************ localhost Git ************ - git summary of repo "test1" public url: https://sb74/projects/gitweb/test1/summary revProxy url: https://localhost:446/projects/gitweb/test1/summary ************ localhost Git - test1/summary ************ Any ideas? Regards Daniel