previous page: Code Excerpts
page up:
next page: Errata

Table of Contents


Part I. mod_perl Administration

1. Introducing CGI and mod_perl

     A Brief History of CGI
     The Apache 1.3 Server Model
     The Development of mod_perl 1.0
     Apache 1.3 Request Processing Phases

2. Getting Started Fast

     Installing mod_perl 1.0 in Three Steps
     Installing mod_perl on Unix Platforms
     Configuring and Starting the mod_perl Server
     Installing mod_perl for Windows
     Preparing the Scripts Directory
     A Sample Apache::Registry Script
     A Simple mod_perl Content Handler
     Is This All We Need to Know About mod_perl?

3. Installing mod_perl

     Configuring the Source
     Building mod_perl (make)
     Testing the Server (make test)
     Installation (make install)
     Installation Scenarios for Standalone mod_perl
     Building mod_perl with Other Components
     Installing mod_perl with the Interactive Shell
     Installing mod_perl on Multiple Machines
     Installation into a Nonstandard Directory
     How Can I Tell if mod_perl Is Running?
     General Notes

4. mod_perl Configuration

     Apache Configuration
     mod_perl Configuration
     The Startup File
     Apache Configuration in Perl
     Validating the Configuration Syntax
     The Scope of mod_perl Configuration Directives
     Apache Restarts Twice
     Enabling Remote Server Configuration Reports
     Tips and Tricks
     Configuration Security Concerns
     General Pitfalls

5. Web Server Control, Monitoring, Upgrade, and Maintenance

     Starting the Server in Multi-Process Mode
     Starting the Server in Single-Process Mode
     Using kill to Control Processes
     Using apachectl to Control the Server
     Validating Server Configuration
     Setuid root Startup Scripts
     Preparing for Machine Reboot
     Upgrading a Live Server
     Three-Tier Server Scheme: Development, Staging, and Production
     Web Server Monitoring
     Server Maintenance Chores

6. Coding with mod_perl in Mind

     Before You Start to Code
     Exposing Apache::Registry Secrets
     Namespace Issues
     Perl Specifics in the mod_perl Environment
     CHECK and INIT Blocks
     Apache::Registry Specifics
     Transition from mod_cgi Scripts to Apache Handlers
     Loading and Reloading Modules
     Handling the "User Pressed Stop Button" Case
     Handling Server Timeout Cases and Working with $SIG{ALRM}
     Generating Correct HTTP Headers
     Method Handlers: The Browse and See, Browse and View Example

Part II. mod_perl Performance

7. Identifying Your Performance Problems

     Looking at the Big Picture
     Asking the Right Questions

8. Choosing a Platform for the Best Performance

     Choosing the Right Operating System
     Choosing the Right Hardware

9. Essential Tools for Performance Tuning

     Server Benchmarking
     Perl Code Benchmarking
     Process Memory Measurements
     Apache::Status and Measuring Code Memory Usage
     Code Profiling Techniques

10. Improving Performance with Shared Memory and Proper Forking

     Sharing Memory
     Forking and Executing Subprocesses from mod_perl

11. Tuning Performance by Tweaking Apache's Configuration

     Setting the MaxClients Directive
     Setting the MaxRequestsPerChild Directive
     Setting MinSpareServers, MaxSpareServers, and StartServers
     Reducing the Number of stat( ) Calls Made by Apache
     Symbolic Links Lookup
     Disabling DNS Resolution
     Response Compressing

12. Server Setup Strategies

     mod_perl Deployment Overview
     Standalone mod_perl-Enabled Apache Server
     One Plain and One mod_perl-Enabled Apache Server
     One Light Non-Apache and One mod_perl-Enabled Apache Server
     Adding a Proxy Server in httpd Accelerator Mode
     The Squid Server and mod_perl
     Apache's mod_proxy Module
     mod_rewrite Examples
     Getting the Remote Server IP in the Backend Server in the Proxy Setup
     Frontend/Backend Proxying with Virtual Hosts
     HTTP Authentication with Two Servers and a Proxy
     When One Machine Is Not Enough for Your RDBMS DataBase and mod_perl
     Running More than One mod_perl Server on the Same Machine
     SSL Functionality and a mod_perl Server
     Uploading and Downloading Big Files

13. TMTOWTDI: Convenience and Habit Versus Performance

     Apache::Registry PerlHandler Versus Custom PerlHandle
     Apache::args Versus Apache::Request::param Versus CGI::param
     Buffered Printing and Better print( ) Techniques
     Interpolation, Concatenation, or List
     Keeping a Small Memory Footprint
     Object Methods Calls Versus Function Calls
     Using the Perl stat( ) Call's Cached Results
     time( ) System Call Versus $r->request_time
     Printing Unmodified Files
     Caching and Pre-Caching
     Caching with Memoize
     Comparing Runtime Performance of Perl and C

14. Defensive Measures for Performance Enhancement

     Controlling Your Memory Usage
     Coding for a Smaller Memory Footprint

15. Improving Performance Through Build Options

     Server Size as a Function of Compiled-in Features
     mod_status and ExtendedStatus On
     DYNAMIC_MODULE_LIMIT Apache Build Option
     Perl Build Options
     Architecture-Specific Compile Options

16. HTTP Headers for Optimal Performance

     Date-Related Headers
     Content Headers
     Content Negotiation
     HTTP Requests
     Avoiding Dealing with Headers

Part III. Databases and mod_perl

17. Databases Overview

     Volatile Databases
     Non-Volatile Databases

18. mod_perl Data-Sharing Techniques

     Sharing the Read-Only Data in and Between Processes
     Sharing Data Between Various Handlers

19. DBM and mod_perl

     mod_perl and DBM
     Resource Locking
     Flawed Locking Methods
     Locking Wrappers Overview

20. Relational Databases and mod_perl

     Persistent Database Connections with Apache::DBI
     Improving Performance
     DBI Debug Techniques

Part IV. Debugging and Troubleshooting

21. Error Handling and Debugging

     Warnings and Errors Explained
     Debugging Code in Single-Server Mode
     Tracing System Calls
     Tracing mod_perl-Specific Perl Calls
     Debugging Perl Code
     Analyzing Dumped core Files
     Hanging Processes: Detection and Diagnostics
     Useful Debug Modules
     Looking Inside the Server

22. Troubleshooting mod_perl

     Configuration and Startup
     Code Parsing and Compilation
     Shutdown and Restart

23. Getting Help and Online Resources

     How to Report Problems
     Mailing List Etiquette

Part V. mod_perl 2.0

24. mod_perl 2.0: Installation and Configuration

     What's New in Apache 2.0
     What's New in Perl 5.6.0-5.8.0
     What's New in mod_perl 2.0
     Installing mod_perl 2.0
     Configuring mod_perl 2.0

25. Programming for mod_perl 2.0

     Migrating to and Programming with mod_perl 2.0
     New Apache Phases and Corresponding Perl*Handlers
     I/O Filtering

Part VI. Appendixes

A. mod_perl Recipes

     Emulating the Authentication Mechanism
     Reusing Data from POST Requests
     Redirecting POST Requests
     Redirecting While Maintaining Environment Variables
     Handling Cookies
     Sending Multiple Cookies with the mod_perl API
     Sending Cookies in REDIRECT Responses
     CGI::params in the mod_perlish Way
     Sending Email from mod_perl
     mod_rewrite in Perl
     Setting PerlHandler Based on MIME Type
     Singleton Database Handles
     Terminating a Child Process on Request Completion

B. Apache Perl Modules

     Development-Stage Modules
     Modules to Aid Debugging
     Control and Monitoring Modules
     Server Configuration Modules
     Authentication-Phase Modules
     Authorization-Phase Modules
     Access-Phase Modules
     Type Handlers
     Trans Handlers
     Fixup Handlers
     Generic Content-Generation Modules
     Application-Specific Content-Generation Modules
     Database Modules
     Toolkits and Frameworks for Content-Generation and Other Phases
     Output Filters and Layering Modules
     Logging-Phase Handlers
     Core Apache Modules
     Other Miscellaneous Modules

C. ISPs Providing mod_perl Services

     Users Sharing a Single Web Server
     Users Sharing a Single Machine
     Giving Each User a Separate Machine (Colocation)
     Giving Each User a Virtual Machine

D. The Template Toolkit

     Fetching and Installing the Template Toolkit
     Typical Uses
     Template Toolkit Language
     Processing Templates
     Apache/mod_perl Handler
     Apache::Template Module
     Hangman Application

E. The AxKit XML Application Server

     Installing and Configuring AxKit
     Your First AxKit Page
     Dynamic Content
     More XPathScript Details
     Putting Everything Together
     More Reasons to Use AxKit

F. HTTP Status Codes

     HTTP/1.0 Status Codes
     HTTP/1.1 Status Codes


previous page: Code Excerpts
page up:
next page: Errata

Add to Google