0

We want to retrieve URL and use it inside our vhosts, realtime.

To demonstrate my case, I placed random numbers on ServerAdmin directive,

$ServerAdmin = int(rand(100))."loko\@koko.com";

As you may know, this random number is assigned only when you restart the server, and never changes until another restart.

This is what we want: if julie.myperl.com is the requested domain, then $ServerAdmin = [email protected], that is, realtime.

Hopefully there is a solution, since this will help us remove thousands of config files, and save us from thousands of apache reloads.

Thanks, Devrim

here is kind of similar situation and solution,

http://httpd.apache.org/docs/1.3/mod/mod_vhost_alias.html

and here is why ask this question, we have built an API in which subdomains signify unix account names, so variable part of {$user}.domain.com must be used within vhost conf. Using variables within Apache virtualhost containers

1 Answer 1

1

I answered a similar question a while back that may help you. Basically it's a bit of perl that will do any sort of dynamic configuration based on the url. In that example it was setting the Require directive based on the directory, but with a tiny bit of adjustment it should do what you need as well.

Take a look here: Dynamic authentication realms in Apache

Hope that helps.

Edit: This should to do it. I used server_admin to manipulate the server admin address directly rather than add_config because add_config acts like a <Directory> block, and ServerAdmin isn't allowed there.

<Perl>
 use Apache2::ServerRec qw//;
 use Apache2::ServerUtil qw//;
 use Apache2::RequestRec qw//;
 use Apache2::RequestUtil qw//;
 use Apache2::Const qw/OK DECLINED/;

 my $s = Apache2::ServerUtil->server;

 $s->push_handlers(PerlHeaderParserHandler => sub { my($r) = @_;
  if ( $r->hostname =~ m/(.*)\.([^.]+\.\w+)$/ ) {
   my($subdomain,$domain) = ($1,$2);

   eval{
    $r->server->server_admin("$subdomain\@$domain");
   };
   if ( $@ ) { warn $@ }

   return OK;

  } else {
   return DECLINED;
  }
 });
</Perl>
8
  • Hi Jeff, this is exactly what I am looking for, and it's very very important. I couldn't change your script, could you help me out? I just need {} part of any {}.domain.com to be assigned to $1, I can do the rest. I'd really really appreciate your 5 mins on this! Thanks!
    – Devrim
    Nov 19, 2009 at 3:48
  • Answer updated. Took a bit more than five minutes, but it was fun to mess with. ;-) Let me know if that does what you need. Nov 19, 2009 at 5:05
  • Thanks Jeff! Awesome! Please drop me a note at devrim at kodingen.com if you are up to some consulting, we need these perl hacks for perfect configuration... Thanks again!
    – Devrim
    Nov 19, 2009 at 17:06
  • I actually am having difficulty adjusting this regex.. I think Perl using slightly different syntax. I have to push this variable to <IfModule mpm_itk_module> AssignUserId $subdomain $subdomain </IfModule> . I was able to do this before: $IfModule{"mpm_itk_module"} = {AssignUserId => "devrim devrim"}; now this didn't work within your snippet..
    – Devrim
    Nov 19, 2009 at 17:11
  • $r->add_config(["AssignUserId $subdomain $subdomain"]); may work. Please try it. If that doesn't work, you'll probably have to approach this problem from another angle. Nov 19, 2009 at 22:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .