4.9 Tips and Tricks
The following are miscellaneous tips and tricks that might save you
lots of time when configuring mod_perl and Apache.
4.9.1 Publishing Port Numbers Other Than 80
If you are using a dual-server setup, with a
mod_perl server listening on a high port (e.g., 8080),
don't publish the high port number in URLs. Rather,
use a proxying rewrite rule in the non-mod_perl server:
RewriteEngine On
RewriteLogLevel 0
RewriteRule ^/perl/(.*) http://localhost:8080/perl/$1 [P]
ProxyPassReverse / http://localhost/
In the above example, all the URLs starting with
/perl are rewritten to the backend server,
listening on port 8080. The backend server is not directly
accessible; it can be reached only through the frontend server.
One of the problems with publishing high port numbers is that
Microsoft Internet Explorer (IE) 4.x has a bug when re-posting data
to a URL with a nonstandard port (i.e., anything but 80). It drops
the port designator and uses port 80 anyway. Hence, your service will
be unusable for IE 4.x users.
Another problem is that firewalls will probably have most of the high
ports closed, and users behind them will be unable to reach your
service if it is running on a blocked port.
4.9.2 Running the Same Script from Different Virtual Hosts
When
running under a virtual host, Apache::Registry and
other registry family handlers will compile each script into a
separate package. The package name includes the name of the virtual
host if the variable
$Apache::Registry::NameWithVirtualHost is set to
1. This is the default behavior.
Under this setting, two virtual hosts can have two different scripts
accessed via the same URI (e.g.,
/perl/guestbook.pl) without colliding with each
other. Each virtual host will run its own version of the script.
However, if you run a big service and provide a set of identical
scripts to many virtual hosts, you will want to have only one copy of
each script compiled in memory. By default, each virtual host will
create its own copy, so if you have 100 virtual hosts, you may end up
with 100 copies of the same script compiled in memory, which is very
wasteful. If this is the case, you can override the default behavior
by setting the following directive in a startup file or in a
<Perl> section:
$Apache::Registry::NameWithVirtualHost = 0;
But be careful: this makes sense only if you are sure that there are
no other scripts with identical URIs but different content on
different virtual hosts.
Users of mod_perl v1.15 are encouraged to upgrade to the latest
stable version if this problem is encountered—it was solved
starting with mod_perl v1.16.
|