Show Contents Previous Page Next Page Chapter 8 - Customizing the Apache Configuration Process / Configuring Apache with Perl If there is a syntax error in the Perl code causing it to fail during compilation, Apache will report the problem and the server will not start. One way to catch Perl syntax errors ahead of time is to structure your <Perl> sections like this: <Perl> #!perl ... code here ...
__END__
</Perl>
You can now directly syntax-check the configuration file using the Perl
interpreter's -cx switches. -c makes Perl perform a syntax
check, and -x tells the interpreter to ignore all junk prior to the
% perl -cx httpd.conf httpd.conf syntax OK If the Perl code is syntactically correct, but the Apache configuration generated from it contains an error, an error message will be sent to the server error log, but the server will still start. In general, it is always a good to look at the error log after starting the server to make sure startup went smoothly. If you have not picked up this good habit already, we strongly recommend you do so when working with <Perl> configuration sections. Another helpful trick is to build Another tool that is occasionally useful is the Apache::PerlSections module. It defines two public routines named dump() and store(). dump() dumps out the current contents of the <Perl> section as a pretty-printed string. <Perl> does the same but writes the contents to the file of your choice. Both methods are useful for making sure that the configuration you are getting is what you expect. Apache::PerlSections requires the Perl Devel::SymDump and Data::Dumper modules, both available on CPAN. Here is a simple example of its use: <Perl> #!perl use Apache::PerlSections(); $User = 'nobody'; $VirtualHost{'192.168.2.5:80'} = { ServerName => 'www.fishfries.org', DocumentRoot => '/home/httpd/fishfries/htdocs', ErrorLog => '/home/httpd/fishfries/logs/error.log', TransferLog => '/home/httpd/fishfries/logs/access.log', ServerAdmin => 'webmaster@fishfries.org', }; print STDERR Apache::PerlSections->dump(); __END__ </Perl> This will cause the following to appear on the command line at server startup time: package Apache::ReadConfig; #scalars: $User = 'nobody'; #arrays: #hashes: %VirtualHost = ( '192.168.2.5:80' => { 'ServerAdmin' => 'webmaster@fishfries.org', 'ServerName' => 'www.fishfries.org', 'DocumentRoot' => '/home/httpd/fishfries/htdocs', 'ErrorLog' => '/home/httpd/fishfries/logs/error.log', 'TransferLog' => '/home/httpd/fishfries/logs/access.log' } ); 1; __END__ The output from dump() and store() can be stored to a file and reloaded with a require statement. This allows you to create your configuration in a modular fashion: <Perl> require "standard_configuration.pl"; require "virtual_hosts.pl"; require "access_control.pl"; </Perl> More information about Apache::PerlSections can be found in Appendix A, Standard Noncore Modules. Show Contents Go to Top Previous Page Next Page If the Perl configuration syntax seems a bit complex for your needs, there
is a simple alternative. The special variables <Perl> $PerlConfig = "User $ENV{USER}\n"; $PerlConfig .= "ServerAdmin $ENV{USER}\@$hostname\n"; </Perl> <Perl> for my $host (qw(one red two blue)) { $host = "$host.fish.net"; push @PerlConfig, <<EOF; Listen $host <VirtualHost $host> ServerAdmin webmaster\@$host ServerName $host # ... more config here ... </VirtualHost> EOF } </Perl> One more utility method is available: Apache->httpd_conf, which
simply pushes each argument into the Apache->httpd_conf( "User $ENV{USER}", "ServerAdmin $ENV{USER}\@$hostname", );Show Contents Go to Top Previous Page Next Page Copyright © 1999 by O'Reilly & Associates, Inc. |
HIVE: All information for read only. Please respect copyright! |