]> Sergey Matveev's repositories - public-inbox.git/commitdiff
add example configs for Apache2 mod_perl and CGI
authorEric Wong <e@80x24.org>
Wed, 30 Apr 2014 20:24:54 +0000 (20:24 +0000)
committerEric Wong <e@80x24.org>
Wed, 30 Apr 2014 20:26:57 +0000 (20:26 +0000)
These are probably still popular configurations in some
settings, so include sample configurations to get folks
started.  These are trickier than an average CGI script
to setup because we rely on pretty URLs from PATH_INFO
and not ugly query parameters.

examples/apache2_cgi.conf [new file with mode: 0644]
examples/apache2_perl.conf [new file with mode: 0644]
public-inbox.cgi

diff --git a/examples/apache2_cgi.conf b/examples/apache2_cgi.conf
new file mode 100644 (file)
index 0000000..455e478
--- /dev/null
@@ -0,0 +1,32 @@
+# Example Apache2 configuration using mod_cgi
+# adjust paths to your installation
+
+ServerName "public-inbox"
+ServerRoot "/var/www/cgi-bin"
+DocumentRoot "/var/www/cgi-bin"
+ErrorLog "/tmp/public-inbox-error.log"
+PidFile "/tmp/public-inbox.pid"
+Listen 8080
+LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
+LoadModule env_module /usr/lib/apache2/modules/mod_env.so
+LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
+LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
+LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
+TypesConfig "/dev/null"
+
+<Directory /var/www/cgi-bin>
+       Options +ExecCGI
+       AddHandler cgi-script .cgi
+
+       # we use this hack to ensure "public-inbox.cgi" doesn't show up
+       # in any of our redirects:
+       SetEnv NO_SCRIPT_NAME 1
+
+       # our public-inbox.cgi requires PATH_INFO-based URLs with minimal
+       # use of query parameters
+       DirectoryIndex public-inbox.cgi
+       RewriteEngine On
+       RewriteCond %{REQUEST_FILENAME} !-f
+       RewriteCond %{REQUEST_FILENAME} !-d
+       RewriteRule ^.* /public-inbox.cgi/$0 [L,PT]
+</Directory>
diff --git a/examples/apache2_perl.conf b/examples/apache2_perl.conf
new file mode 100644 (file)
index 0000000..e963af6
--- /dev/null
@@ -0,0 +1,35 @@
+# Example Apache2 configuration using mod_perl2
+# adjust paths to your installation
+
+ServerName "public-inbox"
+ServerRoot "/var/www/cgi-bin"
+DocumentRoot "/var/www/cgi-bin"
+ErrorLog "/tmp/public-inbox-error.log"
+PidFile "/tmp/public-inbox.pid"
+Listen 8080
+LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
+LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
+LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
+LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
+TypesConfig "/dev/null"
+
+# PerlPassEnv PATH # this is implicit
+PerlPassEnv HOME
+<Directory /var/www/cgi-bin>
+       Options +ExecCGI
+       AddHandler perl-script .cgi
+       PerlResponseHandler ModPerl::Registry
+       PerlOptions +ParseHeaders
+
+       # we use this hack to ensure "public-inbox.cgi" doesn't show up
+       # in any of our redirects:
+       PerlSetEnv NO_SCRIPT_NAME 1
+
+       # our public-inbox.cgi requires PATH_INFO-based URLs with minimal
+       # use of query parameters
+       DirectoryIndex public-inbox.cgi
+       RewriteEngine On
+       RewriteCond %{REQUEST_FILENAME} !-f
+       RewriteCond %{REQUEST_FILENAME} !-d
+       RewriteRule ^.* /public-inbox.cgi/$0 [L,PT]
+</Directory>
index 56040676f6ae1142a1b133a3ce2c8a80c741af81..3bc6eca3c574fbe31e67a07141c10a0269c7b2c8 100755 (executable)
@@ -15,10 +15,12 @@ use warnings;
 use PublicInbox::Config;
 use URI::Escape qw(uri_escape_utf8 uri_unescape);
 our $LISTNAME_RE = qr!\A/([\w\.\-]+)!;
+our $NO_SCRIPT_NAME; # for prettier redirects with mod_perl2
 our $pi_config;
 BEGIN {
        $pi_config = PublicInbox::Config->new;
        # TODO: detect and reload config as needed
+       $NO_SCRIPT_NAME = 1 if $ENV{NO_SCRIPT_NAME};
        if ($ENV{MOD_PERL}) {
                require CGI;
                no warnings;
@@ -36,6 +38,7 @@ if ($ENV{PI_PLACKUP}) {
        # so nuke it since CGI.pm functions without it.
        require CGI;
        delete $ENV{REQUEST_URI};
+       $ENV{SCRIPT_NAME} = '' if $NO_SCRIPT_NAME;
        my $req = CGI->new;
        my $ret = main($req, $req->request_method);
        binmode STDOUT;