stas 2003/12/21 18:24:22 Modified: src/docs/1.0/guide scenario.pod Changes.pod Log: Several handy mod_rewrite rules Submitted by: Fred Moyer <[EMAIL PROTECTED]> Revision Changes Path 1.10 +49 -1 modperl-docs/src/docs/1.0/guide/scenario.pod Index: scenario.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/scenario.pod,v retrieving revision 1.9 retrieving revision 1.10 diff -u -u -r1.9 -r1.10 --- scenario.pod 31 Jul 2002 14:44:19 -0000 1.9 +++ scenario.pod 22 Dec 2003 02:24:22 -0000 1.10 @@ -1653,6 +1653,11 @@ =head1 mod_rewrite Examples +Example code for using mod_rewrite with mod_perl application +servers. Several examples were taken from the mailing list. + +=head2 Rewriting Requests Based on File Extension + In the mod_proxy + mod_perl servers scenario, C<ProxyPass> was used to redirect all requests to the mod_perl server, by matching the beginning of the relative URI (e.g. I</perl>). What should you do if @@ -1686,16 +1691,20 @@ It says: log all the rewrites thru the pipe to the C<rotatelogs> utility which will rotate the logs every 2 hours (86400 secs). -More examples: +=head2 Internet Exporer 5 favicon.ico 404 Redirect all those IE5 requests for I<favicon.ico> to a central image: RewriteRule .*favicon.ico /wherever/favicon.ico [PT,NS] +=head2 Hiding Extensions for Dynamic Pages + A quick way to make dynamic pages look static: RewriteRule ^/wherever/([a-zA-Z]+).html /perl-bin/$1.cgi [PT] +=head2 Serving Static Content Locally and Rewriting Everything Else + Instead of keeping all your Perl scripts in I</perl> and your static content everywhere else, you could keep your static content in special directories and keep your Perl scripts everywhere else. You can still @@ -1737,6 +1746,45 @@ RewriteRule ^/(images|style) - [L] RewriteRule ^/(.*) http://www.example.com:8080/$1 [P] ProxyPassReverse / http://www.example.com/ + +=head2 Upgrading mod_perl Heavy Application Instances + +When using a light/heavy separation method one of the challenges of +running a production environment is being able to upgrade to newer +versions of mod_perl or your own application. The following method can +be used without having to do a server restart. + +Add the following rewrite rule to your httpd.conf file: + + RewriteEngine On + RewriteMap maps txt:/etc/httpd.maps + RewriteRule ^(.*) http://${maps:appserver}$1 [proxy] + +Create the file /etc/httpd.maps and add the following entry: + + appserver foo.com:9999 + +Mod_rewrite rereads (or checks the mtime of) the file on every request +so the change takes effect immediately. To seamlessly upgrade your +application server to a new version, install a new version on a +different port. After checking for a quality installation, edit +/etc/httpd.maps to point to the new server. After the file is written +the next request the server processes will be redirected to the new +installation. + +=head2 Blocking IP Addresses + +The following rewrite code blocks IP addresses: + + RewriteCond /web/site/var/blocked/REMOTE_ADDR-%{REMOTE_ADDR} -f + RewriteRule .* http://YOUR-HOST-BLOCKED-FOR-EXCESSIVE-CONSUMPTION [redirect,last] + +To block IP address 10.1.2.3, simply touch + + /web/site/var/blocked/REMOTE_ADDR-10.1.2.3 + +This has an advantage over Apache parsing a long file of addresses in +that the OS is better at a file lookup. =head1 Caching in mod_proxy 1.39 +7 -0 modperl-docs/src/docs/1.0/guide/Changes.pod Index: Changes.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/Changes.pod,v retrieving revision 1.38 retrieving revision 1.39 diff -u -u -r1.38 -r1.39 --- Changes.pod 1 Dec 2003 20:23:59 -0000 1.38 +++ Changes.pod 22 Dec 2003 02:24:22 -0000 1.39 @@ -11,6 +11,13 @@ =head1 Ongoing +* scenario.pod: + + o Several handy mod_rewrite rules (summarized by Fred Moyer <fred + \at\ taperfriendlymusic.org>) + - Upgrading mod_perl Heavy Application Instances [Rob Nagler] + - Blocking IP Addresses [Randal L. Schwartz] + * porting.pod o revamp the "Exposing Apache::Registry secrets" section to use
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]