[Web-SIG] A query for hosting providers
Ian Bicking
ianb at colorstudy.com
Tue Apr 5 22:40:37 CEST 2005
Remi Delon wrote:
>>>> On our own servers we've been using CGI connectors (wkcgi,
>>>> Zope.cgi), which seem fast enough, and of course won't be crashing
>>>> Apache.
>>>
>>>
>>> Yeah, but we wanted a somewhat "standard" way of talking to Apache and
>>> most frameworks do come with a small HTTP server, so that works fine for
>>> us and it also completely isolates the process from Apache.
>>
>>
>> CGI is pretty standard, isn't it?
>
>
> Are you talking about starting a small CGI script for each request that
> acts as a gateway between Apache and the other server ? (I think Zope
> used to call this "presistent CGI"). In that case, then the overhead is
> not always acceptable.
In my Very Light testing Some Years Ago I found the performance of small
C CGI scripts to be quite acceptable. This is something like Webware's
wkcgi, Zope's Zope.cgi, the fcgi FastCGI script, etc. If I remember
correctly, wkcgi was something like 2x slower than mod_webkit for an
empty page, and a Python CGI script was at least 10x slower (but I think
significantly more). The size of the typical scripts are small enough
to be highly cacheable.
>>>> HTTP does seem like a reasonable way to communicate between servers,
>>>> instead of all these ad hoc HTTP-like protocols (PCGI, SCGI,
>>>> FastCGI, mod_webkit, etc). My only disappointment with that
>>>> technique is that you lose some context -- e.g., if REMOTE_USER is
>>>> set, or SCRIPT_NAME/PATH_INFO (you probably have to configure your
>>>> URLs, since they aren't detectable), mod_rewrite's additional
>>>> environmental variables, etc. Hmm... I notice you use custom
>>>> headers for that (CP-Location), and I suppose other variables could
>>>> also be passed through... it's just unfortunate because that
>>>> significantly adds to the Apache configuration, which is something I
>>>> try to avoid -- it's easy enough to put in place, but hard to maintain.
>>>
>>> The CP-Location trick is not needed (I should remove it from this page
>>> as it confuses people).
>>> Have a look at the section called "What are the drawbacks of running
>>> CherryPy behind Apache ?" on this page:
>>> http://www.cherrypy.org/wiki/CherryPyProductionSetup
>>> It summarizes my view on this (basically, there aren't any real
>>> drawbacks if you're using mod_rewrite with Apache2).
>>
>> Does Apache 2 add a X-Original-URI header or something? I see the
>> Forwarded-For and Forwarded-Host headers, but those are only part of
>> the request -- leaving out REMOTE_USER, SCRIPT_NAME, PATH_INFO, and
>> maybe some other internal variables.
>
> I think you're confusing 2 things... The variables you mention are
> CGI-specific.
Well, they are also the same variables typically used in most in-Apache
systems -- you have them in PHP, in mod_python, via FastCGI, etc. WSGI
also makes particular use of SCRIPT_NAME and PATH_INFO, which represents
more information than a single URL presents. I find all these variables
useful. Many could be represented as extra headers -- including
something like CP-Location -- but I find the alternative relies too
heavily on configuration for my tastes.
> I was just talking about mod_rewrite: Apache just forwards the HTTP
> request it gets to the other server. To this other server, the request
> will look exactly as if it came from the client, except for 2 things:
> - The "Host" header will be "localhost" (assuming Apache and the other
> server are on the same machine) instead of the actual Host header from
> the original HTTP request (but you can access the original value through
> X-Forwarded-Host)
> - The remote IP address will be the one from Apache (again,
> "localhost" if it's on the same machine). But again, you can access the
> IP address of the client through X-Forwarded-For
> - AFAIK, all the other HTTP headers will be kept intact, so it's
> exactly as if your server was running exposed.
>
> I'm just really advocating mod_rewrite between Apache and the other
> server because that's how I've been running most of my production sites
> for the past 5 years and it's always worked great :-)
I've used it a lot too, in a variety of ways, and I'm more-or-less
comfortable with it. But I think it provides a challenge to the new
user, and can be difficult to debug, so I'm looking for clearer
alternatives.
--
Ian Bicking / ianb at colorstudy.com / http://blog.ianbicking.org
More information about the Web-SIG
mailing list