Bug identified in user's web server [closed]
[ikiwiki.git] / doc / bugs / Running_on_an_alternative_port_fails.mdwn
index c6e09171d332609bd1bb253e4f8f038c1385506f..864c99fed388ff1a81920a721b5f984114973c86 100644 (file)
@@ -5,3 +5,53 @@ For example if you run on 'http://my.gear.xxx:8080/' then after clicking login (
  -- fergus
 
 NB: both the 'url' and the 'cgiurl' include the port and removing the port element provides the expected functionality.
+
+---
+
+> I tried to reproduce this by making my laptop's web server use port
+> 8080. Set up ikiwiki to use that in cgiurl and url, and had
+> no problem with either openid or password auth login.
+> 
+> Ikiwiki has had some changes in this area in the past year; you don't say
+> what version you were using. It could also be a problem with your web
+> server, conceviably, if didn't correctly communicate the port to the cgi
+> program. --[[Joey]]
+
+---
+
+>> I did think of that so threw a 'printenv' script to check the port was arriving 
+right.
+
+>>>     SERVER_PORT=8181  
+>>>     HTTP_HOST=zippy0.ie0.cobbled.net  
+
+[ ... ]
+
+>>>> In apache, `HTTP_HOST` includes the port. This is not part of the CGI
+>>>> spec it seems, but perl's `CGI` module seems to rely on it,
+>>>> in `virtual_port`:
+
+>>>>>     my $vh = $self->http('x_forwarded_host') || $self->http('host');
+>>>>>     my $protocol = $self->protocol;
+>>>>>     if ($vh) {
+>>>>>        return ($vh =~ /:(\d+)$/)[0] || ($protocol eq 'https' ? 443 : 80);
+
+>>>> The `CGI` module only looks at `SERVER_PORT` when there's no
+>>>> `HTTP_HOST`. So this is either a bug in perl's CGI or thttpd.
+>>>> --[[Joey]]
+
+[ ... ]
+
+---
+
+>>>>> This is interesting.  If HTTP_HOST is wrong then
+
+>>>>> 0. the client header must be wrong (i.e. not including the PORT)
+>>>>> 0. `perl`'s doing something bad[tm] (or at least lazy)
+>>>>> 0. `apache` is adding it
+>>>>> 0. `thttpd` is stripping it
+
+>>>>> Quick hack shows that `thttpd` must be stripping the port
+number from the `Host:` header.  That can be fixed.
+
+>>>>> Thanks for the assist. -- fergus