On Monday, 12 September 2011 11:04:35 utham hoode wrote:
> I have written a mod_perl proxy server which redirects the HTTP
> traffic to a webserver.
> In the apache worker thread is enable. In the httpd.conf two
> are configured
> http://ipaddress/path1/
> http://ipaddress/path2/
> After starting the http server if i open any URL from the browser same
> TEST_VAR is being printed
> for both the URLs.
> If I call path1 first then for both the URLs 100 is printed.
> If I call path2 first then for both the URLs 200 is printed.

I am still a bit at a loss what you are trying to do here. The phrase 
"modperl proxy server that redirects" is quite ambiguous:

- a modperl handler that works in the response phase, mangles the request 
a bit before sending it to a backend server. On the way back the response 
from the backend is again a bit mangled perhaps and sent to the client

- on the other hand it may be a server that sends out HTTP redirects to 
point the browser to the correct server using HTTP 3xx codes.

- and thirdly it may be a piece of code working in a phase between 
maptostorage and fixup that modifies the request configuration to have it
handled by mod_proxy.

- perhaps there are a few more possible meanings

Generally, apache creates an individual configuration for each request. 
At first it looks up the virtual server config. Then it merges into that 
one all the <Location> <Directory> <Files> blocks that are applicable.

So, you can set a certain environment variable for one request to value1 
and for another to value2. But you have to have a distinguishing mark.

> #startup.pl
> use lib qw(/home/test1/libs);
> 1;
> 
> #---------------------------------
> 
> # httpd.conf
> PerlRequire /home/test1/startup.pl
> #http://ipaddress/path1/
> 
> SetEnvIf Request_URI "/" TEST_VAR=100
> SetHandler perl-script
> PerlResponseHandler Module::Test
> 
> #http://ipaddress/path2/
> 
> SetEnvIf Request_URI "/" TEST_VAR=200
> SetHandler perl-script
> PerlResponseHandler Module::Test

In the snippet above I do not see any such mark. You set TEST_VAR to 100 
and to 200 if the request URI is /. That does not make sense.

> 
> #Test.pm
> #--------------------------------------------------------------------
> package Module::Test;
> use strict;
> use Apache2::Const qw(:methods :http :common);
> use Apache2::Log ();
> use Apache2::URI ();
> 
> my $param = env_variable();

Here you use a global variable that is set only once for the lifetime of 
the interpreter when the module is compiled. $param is not set for each 
request.

> sub handler
> {
> Apache2::ServerRec::warn($param);
> print "Value".$param;
> return Apache2::Const::OK;
> }
> 
> sub env_variable
> {
> # Configuration loading from a file during startup
> my $endpointURL = $ENV{'TEST_VAR'};
> return $endpointURL;
> }
> 1;
> #---------------------------------------------------------------------
> -----------
> 
> But I tried with option and it is working fine as PerlOptions
> +Parent is present.
> But since the port numbers are different firefox will now allow
> simulataneous access to
> both URL from same webpage.
> 
> #http://ipaddress:8080/path1/
> 
> SetEnvIf Request_URI "/" TEST_VAR=100
> PerlRequire /home/test1/startup.pl
> PerlOptions +Parent
> 
> SetHandler perl-script
> PerlResponseHandler Module::Test
> 
> 
> 
> #http://ipaddress:8085/path2/
> 
> SetEnvIf Request_URI "/" TEST_VAR=200
> PerlRequire /home/test1/startup.pl
> PerlOptions +Parent
> 
> SetHandler perl-script
> PerlResponseHandler Module::Test

+Parent is a VHost level option like:

<VirtualHost ...>
  PerlOptions +Parent
  ...
</VirtualHost>

The virtual host then gets it's own perl interpreter. It has been 
requested a few times to make it possible to change the interpreter per 
request configuration but nobody has got around to do the work yet. 
Something along these lines would be good:

<PerlInterpreter MyInterpreter>
PerlSwitches ...
PerlRequire ...
PerlModule ...
</PerlInterpreter>

<PerlInterpreter OtherInterpreter>
PerlSwitches ...
PerlRequire ...
PerlModule ...
</PerlInterpreter>

<Location /...>
PerlUseInterpreter MyInterpreter
</Location>

Torsten Förtsch

-- 
Need professional modperl support? Hire me! (http://foertsch.name)

Like fantasy? http://kabatinte.net

Reply via email to