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