All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Reichelt <debian@nachtgeist.net>
To: Jakub Narebski <jnareb@gmail.com>
Cc: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>,
	Jonathan Nieder <jrnieder@gmail.com>,
	git@vger.kernel.org
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	[thread overview]
Message-ID: <4CF2BBEE.2050808@nachtgeist.net> (raw)
In-Reply-To: <201011281847.40233.jnareb@gmail.com>

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
>    <base href="$base_url">.  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 "<base href=\"".esc_url($base_url)."\" />\n";
}
print "<!--
$base_url
$my_url
$my_uri
-->";
************


- git repo listing
public url: https://sb74/projects/gitweb
revProxy url: https://localhost:446/projects/gitweb
************
<head>
<meta http-equiv="content-type" content="application/xhtml+xml;
charset=utf-8"/>
<meta name="generator" content="gitweb/1.7.2.3 git/1.7.2.3"/>
<meta name="robots" content="index, nofollow"/>
<title>localhost Git</title>
<!--
		https://sb74:446/projects/gitweb
		https://sb74:446/projects/gitweb
		/projects/gitweb
		--><link rel="stylesheet" type="text/css"
href="/projects/gitweb/gitweb/gitweb.css"/>
<link rel="alternate" title="localhost Git projects list"
href="/projects/gitweb?a=project_index" type="text/plain; charset=utf-8" />
<link rel="alternate" title="localhost Git projects feeds"
href="/projects/gitweb?a=opml" type="text/x-opml" />
<link rel="shortcut icon" href="/projects/gitweb/gitweb/git-favicon.png"
type="image/png" />
</head>
************


- git summary of repo "test1"
public url: https://sb74/projects/gitweb/test1/summary
revProxy url: https://localhost:446/projects/gitweb/test1/summary
************
<head>
<meta http-equiv="content-type" content="application/xhtml+xml;
charset=utf-8"/>
<meta name="generator" content="gitweb/1.7.2.3 git/1.7.2.3"/>
<meta name="robots" content="index, nofollow"/>
<title>localhost Git - test1/summary</title>
<base href="https://sb74:446/projects/gitweb" />
<!--
		https://sb74:446/projects/gitweb
		https://sb74:446/projects/gitweb
		/projects/gitweb
		--><link rel="stylesheet" type="text/css"
href="/projects/gitweb/gitweb/gitweb.css"/>
<link rel="alternate" title="test1 - log - RSS feed"
href="/projects/gitweb/test1/rss" type="application/rss+xml" />
<link rel="alternate" title="test1 - log - RSS feed (no merges)"
href="/projects/gitweb/test1/rss?opt=--no-merges"
type="application/rss+xml" />
<link rel="alternate" title="test1 - log - Atom feed"
href="/projects/gitweb/test1/atom?opt=--no-merges"
type="application/atom+xml" />
<link rel="alternate" title="test1 - log - Atom feed (no merges)"
href="/projects/gitweb/test1/atom?opt=--no-merges"
type="application/atom+xml" />

<link rel="shortcut icon" href="/projects/gitweb/gitweb/git-favicon.png"
type="image/png" />
</head>
************

Any ideas?

Regards
Daniel

  parent reply	other threads:[~2010-11-28 20:39 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20101128081048.13668.67286.reportbug@sb74.startrek>
2010-11-28 16:27 ` gitweb: false base href sent when integrated via reverse proxy and path_info is active Jonathan Nieder
2010-11-28 17:25   ` Giuseppe Bilotta
2010-11-28 17:47     ` Jakub Narebski
2010-11-28 18:12       ` Jonathan Nieder
2010-11-30 18:22         ` Jakub Narebski
2010-12-01  3:25           ` Junio C Hamano
2010-11-28 20:30       ` Daniel Reichelt [this message]
2010-11-28 21:07         ` Jakub Narebski
2010-11-28 21:25           ` Daniel Reichelt
2010-11-28 21:10         ` Jonathan Nieder
2010-11-28 21:28           ` Daniel Reichelt
2010-11-28 22:05           ` Jakub Narebski
2010-11-29  0:19             ` [PATCH/RFC] gitweb: Preserve $base_url if it was set Jonathan Nieder
2010-11-29  0:51               ` [PATCH/RFC] gitweb/README: About $base_url etc. and $per_request_config Jakub Narebski
2010-11-29 17:57               ` [PATCH/RFC] gitweb: Preserve $base_url if it was set Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CF2BBEE.2050808@nachtgeist.net \
    --to=debian@nachtgeist.net \
    --cc=git@vger.kernel.org \
    --cc=giuseppe.bilotta@gmail.com \
    --cc=jnareb@gmail.com \
    --cc=jrnieder@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.