From: Eric Wong Date: Wed, 30 Apr 2014 20:24:54 +0000 (+0000) Subject: add example configs for Apache2 mod_perl and CGI X-Git-Tag: v1.0.0~1171 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=d444d9aebc6e401333968ec697c48fb23214a1ea add example configs for Apache2 mod_perl and CGI 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. --- diff --git a/examples/apache2_cgi.conf b/examples/apache2_cgi.conf new file mode 100644 index 00000000..455e4780 --- /dev/null +++ b/examples/apache2_cgi.conf @@ -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" + + + 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] + diff --git a/examples/apache2_perl.conf b/examples/apache2_perl.conf new file mode 100644 index 00000000..e963af6e --- /dev/null +++ b/examples/apache2_perl.conf @@ -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 + + 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] + diff --git a/public-inbox.cgi b/public-inbox.cgi index 56040676..3bc6eca3 100755 --- a/public-inbox.cgi +++ b/public-inbox.cgi @@ -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;