1. Problem Description:

  I am running Apache/2.0.48 (Win32) mod_perl/1.99_13 Perl/v5.8.0 on Windows XP.

I've downloaded the Apache binary from http://hunter.campbus.com/, and have tried IBM httpd 2.047 as well. mod perl and Apache::Clean I have installed using perl ppm. My perl is from ActivePerl.

I have written a OutputFilter that finds a string in a response and replaces the string with another. It works fine with static files, but not on response from a reverse proxy, and that is just what I want to achieve. I'm trying to run my Outlook Web Access backend behind an Apache frontend.

Running Apache::Clean for instance does work on reverse proxied content, it seems.

In my error log I see:

[Mon Mar 22 15:33:31 2004] [info] Mike:filter.pm(43): mapping for /index.html (an HTML document)
[Mon Mar 22 15:33:31 2004] [info] Exiting Mike:filter.pm
[Mon Mar 22 15:33:31 2004] [info] Mike:filter.pm(29): skipping request to /rowan.jpg (not an HTML document)
[Mon Mar 22 15:33:31 2004] [info] Exiting Mike:filter.pm
[Mon Mar 22 15:33:48 2004] [info] Mike:filter.pm(43): mapping for /index.html (an HTML document)
[Mon Mar 22 15:33:48 2004] [info] Exiting Mike:filter.pm
[Mon Mar 22 15:33:48 2004] [info] Mike:filter.pm(29): skipping request to /rowan.jpg (not an HTML document)
[Mon Mar 22 15:33:48 2004] [info] Exiting Mike:filter.pm
[Mon Mar 22 15:33:53 2004] [debug] proxy_http.c(109): proxy: HTTP: canonicalising URL //mda.demon.nl:86/exchange/
[Mon Mar 22 15:33:53 2004] [debug] mod_proxy.c(459): Trying to run scheme_handler
[Mon Mar 22 15:33:54 2004] [debug] proxy_http.c(1076): proxy: HTTP: serving URL http://mda.demon.nl:86/exchange/
[Mon Mar 22 15:33:54 2004] [debug] proxy_http.c(221): proxy: HTTP connecting http://mda.demon.nl:86/exchange/ to mda.demon.nl:86
[Mon Mar 22 15:33:54 2004] [debug] proxy_util.c(1203): proxy: HTTP: fam 2 socket created to connect to mda.demon.nl
[Mon Mar 22 15:33:54 2004] [debug] proxy_http.c(370): proxy: socket is connected
[Mon Mar 22 15:33:54 2004] [debug] proxy_http.c(404): proxy: connection complete to 212.238.156.229:86 (mda.demon.nl)
[Mon Mar 22 15:33:54 2004] [debug] proxy_http.c(917): proxy: start body send
[Mon Mar 22 15:33:54 2004] [info] Mike:filter.pm(43): mapping for /exchange/ (an HTML document)
[Mon Mar 22 15:33:54 2004] [info] Exiting Mike:filter.pm
Free to wrong pool 81a5a0 not 8f5cb0.
[Mon Mar 22 15:33:59 2004] [notice] Parent: child process exited with status 3221225477 -- Restarting.
[Mon Mar 22 15:34:00 2004] [notice] Parent: Created child process 4496
[Mon Mar 22 15:34:00 2004] [debug] mpm_winnt.c(505): Parent: Sent the scoreboard to the child
[Mon Mar 22 15:34:00 2004] [notice] Child 4496: Child process is running
[Mon Mar 22 15:34:00 2004] [debug] mpm_winnt.c(426): Child 4496: Retrieved our scoreboard from the parent.
[Mon Mar 22 15:34:00 2004] [info] Parent: Duplicating socket 184 and sending it to child process 4496
[Mon Mar 22 15:34:00 2004] [debug] mpm_winnt.c(623): Parent: Sent 1 listeners to child 4496
[Mon Mar 22 15:34:00 2004] [debug] mpm_winnt.c(582): Child 4496: retrieved 1 listeners from parent
[Mon Mar 22 15:34:00 2004] [notice] Child 4496: Acquired the start mutex.
[Mon Mar 22 15:34:00 2004] [notice] Child 4496: Starting 25 worker threads.
[Mon Mar 22 15:34:00 2004] [debug] child.c(695): Child 4496: Worker thread 0 starting.
[Mon Mar 22 15:34:00 2004] [debug] child.c(695): Child 4496: Worker thread 1 starting.
[Mon Mar 22 15:34:00 2004] [debug] child.c(695): Child 4496: Worker thread 2 starting.

httpd.conf contains:

<VirtualHost *:81>
    ServerName mail.franken.ws
    DocumentRoot e:/www/docs/rowan.kueper.org/
    ProxyPass                /exchange    http://backend:86/exchange
    ProxyPassReverse         /exchange    http://backend:86/exchange
    ProxyPass               /exchweb   http://backend:86/ExchWeb
    ProxyPassReverse        /exchweb   http://backend:86/ExchWeb
    ProxyPass               /public   http://backend:86/public
    ProxyPassReverse        /public   http://backend:86/public
    PerlModule Apache2
    PerlModule Mike::Filter
    <Location />
        SetHandler modperl
        PerlOutputFilterHandler Mike::Filter
        PerlSetVar FilterSource backend:86
        PerlAddVar FilterDestination frontend:81
    </Location>
</VirtualHost>

Filter:
package Mike::Filter;

#inspired by Apache::Clean filter
use 5.008;

use Apache::Filter ();      # $f
use Apache::RequestRec ();  # $r
use Apache::RequestUtil (); # $r->dir_config()
use Apache::Log ();         # $log->info()
use APR::Table ();          # dir_config->get() and headers_out->get()

use Apache::Const -compile => qw(OK DECLINED);

use strict;

use constant BUFF_LEN => 1024;

sub handler {
  my $f   = shift;

  my $r   = $f->r;

  my $log = $r->server->log;

  # only process HTML documents
  unless ($r->content_type =~ m!text/html!i) {
    $log->info('Mike:filter.pm(29): skipping request to ', $r->uri, ' (not an HTML document)');
      $log->info('Exiting Mike:filter.pm');
    return Apache::DECLINED;
  }

    my $src = ""
    my $dst = $r->dir_config->get('FilterDestination');

    # unset Content-Length since we're probably changing the length
    unless ($f->ctx) {
        $r->headers_out->unset('Content-Length');
        $f->ctx(1);
    }
       
    $log->info('Mike:filter.pm(43): mapping for ', $r->uri, ' (an HTML document)');
    while ($f->read(my $buffer, BUFF_LEN)) {
        $buffer =~ s/$src/$dst/ig;
        $f->print($buffer);
    }

      $log->info('Exiting Mike:filter.pm');
    return Apache::OK;
}
1;




2. Used Components and their Configuration:

*** mod_perl version 1.9913

*** using d:/Perl/site/lib/Apache2/Apache/BuildConfig.pm
*** Makefile.PL options:
  MP_AP_PREFIX    => D:\Apache2
  MP_COMPAT_1X    => 1
  MP_GENERATE_XS  => 1
  MP_INST_APACHE2 => 1
  MP_LIBNAME      => mod_perl
  MP_USE_DSO      => 1
  MP_USE_STATIC   => 1


*** The httpd binary was not found

$ ./Apache -V
Server version: Apache/2.0.48
Server built:   Mar 19 2004 00:05:49
Server's Module Magic Number: 20020903:4
Architecture:   32-bit
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/winnt"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error.log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

$ ./Apache -l
Compiled in modules:
  core.c
  mod_win32.c
  mpm_winnt.c
  http_core.c
  mod_so.c



*** D:\Perl\bin\perl.exe -V
Summary of my perl5 (revision 5 version 8 subversion 0) configuration:
  Platform:
    osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
    uname=''
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    usethreads=undef use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cl', ccflags ='-nologo -Gf -W3 -MD -DNDEBUG -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT  -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX',
    optimize='-MD -DNDEBUG -O1',
    cppflags='-DWIN32'
    ccversion='', gccversion='', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='link', ldflags ='-nologo -nodefaultlib -release  -libpath:"D:\Perl\lib\CORE"  -machine:x86'
    libpth="D:\Perl\lib\CORE"
    libs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib msvcrt.lib
    perllibs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib msvcrt.lib
    libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib
    gnulibc_version='undef'
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -release  -libpath:"D:\Perl\lib\CORE"  -machine:x86'


Characteristics of this binary (from libperl):
  Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS
  Locally applied patches:
      ActivePerl Build 804
  Built under MSWin32
  Compiled at Dec  1 2002 23:15:13
  %ENV:
    PERL_LWP_USE_HTTP_10="1"
  @INC:
    D:/Perl/lib
    D:/Perl/site/lib
    .


3. This is the core dump trace: (if you get a core dump):

  [CORE TRACE COMES HERE]

This report was generated by -e on Mon Mar 22 15:21:35 2004 GMT.

--
Thanks a lot,

  Michael Franken
-- Report problems: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to