##
## httpd.conf -- Apache HTTP server configuration file
##
# This is the main server configuration file. See URL http://www.apache.org/
# fo: instructions.
# Do NOT simply read the instructions in here without understanding
# what they do, if you are unsure consult the online docs. You have been
# warned.
# Originally by Rob McCool
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Please read the file README.DSO in the Apache 1.3 distribution for more
# details about the DSO mechanism and run `httpd -l' for the list of already
# built-in (statically linked and thus always available) modules in your httpd
# binary.
#
# Example:
# LoadModule foo_module libexec/mod_foo.so
#
# Documentation for modules is in "/home/httpd/manual/mod" in HTML format.
# Extra Modules
#LoadModule php_module modules/mod_php.so
#LoadModule php3_module modules/libphp3.so
#LoadModule perl_module /usr/lib/apache/libperl.so
# Reconstruction of the complete module list from all available modules
# (static and shared ones) to achieve correct module execution order.
# [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]
#ClearModuleList
# Extra Modules
#AddModule mod_php.c
#AddModule mod_php3.c
#AddModule mod_perl.c
# ServerType is either inetd, or standalone.
#RewriteLogLevel 9
#RewriteLog rewrite_log
ServerType standalone
# If you are running from inetd, go to "ServerAdmin".
# Port: The port the standalone listens to. For ports < 1023, you will
# need httpd to be run as root initially.
Port 80
# HostnameLookups: Log the names of clients or just their IP numbers
# e.g. www.apache.org (on) or 204.62.129.132 (off)
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on.
HostnameLookups off
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
# User/Group: The name (or #number) of the user/group to run httpd as.
# On SCO (ODT 3) use User nouser and Group nogroup
# On HPUX you may not be able to use shared memory as nobody, and the
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group nobody on these systems!
User httpd
Group httpd
#FIXME?
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.
ServerAdmin admin@traderwebs.co.uk
# ServerRoot: The directory the server's config, error, and log files
# are kept in.
# NOTE! If you intend to place this on a NFS (or otherwise network)
# mounted filesystem then please read the LockFile documentation,
# you will save yourself a lot of trouble.
ServerRoot /etc/httpd
# BindAddress: You can support virtual hosts with this option. This option
# is used to tell the server which IP address to listen to. It can either
# contain "*", an IP address, or a fully qualified Internet domain name.
# See also the VirtualHost directive.
#BindAddress *
# ErrorLog: The location of the error log file. If this does not start
# with /, ServerRoot is prepended to it.
ErrorLog /var/log/httpd/error
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%v %h %{CLIENT}e %{PREVIEW}e %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" client
#LogFormat "%v %h %{CLIENT}e %{%s}t %U %>s %B %{PREVIEW}e %q" client
#LogFormat "%h %l %u %t \"%r\" %>s %b" common
#LogFormat "%{Referer}i -> %U" referer
#LogFormat "%{User-agent}i" agent
# The location of the access logfile (Common Logfile Format).
# If this does not start with /, ServerRoot is prepended to it.
CustomLog /var/log/httpd/access combined
CustomLog /var/log/httpd/client client env=LOGTHIS
# If you would like to have an agent and referer logfile uncomment the
# following directives.
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
# If you prefer a single logfile with access, agent and referer information
# (Combined Logfile Format) you can use the following directive.
#CustomLog logs/access_log combined
# PidFile: The file the server should log its pid to
PidFile /var/run/httpd.pid
# ScoreBoardFile: File used to store internal server process information.
# Not all architectures require this. But if yours does (you'll know because
# this file is created when you run Apache) then you *must* ensure that
# no two invocations of Apache share the same scoreboard file.
ScoreBoardFile /var/log/httpd/httpd_status
# The LockFile directive sets the path to the lockfile used when Apache
# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or
# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at
# its default value. The main reason for changing it is if the logs
# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL
# DISK. The PID of the main server process is automatically appended to
# the filename.
#
#LockFile /var/lock/httpd.lock
# ServerName allows you to set a host name which is sent back to clients for
# your server if it's different than the one the program would get (i.e. use
# "www" instead of the host's real name).
#
# Note: You cannot just invent host names and hope they work. The name you
# define here must be a valid DNS name for your host. If you don't understand
# this, ask your network administrator.
ServerName www.traderwebs.co.uk
# UseCanonicalName: (new for 1.3) With this setting turned on, whenever
# Apache needs to construct a self-referencing URL (a url that refers back
# to the server the response is coming from) it will use ServerName and
# Port to form a "canonical" name. With this setting off, Apache will
# use the hostname:port that the client supplied, when possible. This
# also affects SERVER_NAME and SERVER_PORT in CGIs.
UseCanonicalName off
# CacheNegotiatedDocs: By default, Apache sends Pragma: no-cache with each
# document that was negotiated on the basis of content. This asks proxy
# servers not to cache the document. Uncommenting the following line disables
# this behavior, and proxies will be allowed to cache the documents.
#CacheNegotiatedDocs
# Timeout: The number of seconds before receives and sends time out
Timeout 300
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
KeepAlive Off
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We reccomend you leave this number high, for maximum performance.
MaxKeepAliveRequests 100
# KeepAliveTimeout: Number of seconds to wait for the next request
KeepAliveTimeout 15
# Server-pool size regulation. Rather than making you guess how many
# server processes you need, Apache dynamically adapts to the load it
# sees --- that is, it tries to maintain enough server processes to
# handle the current load, plus a few spare servers to handle transient
# load spikes (e.g., multiple simultaneous requests from a single
# Netscape browser).
# It does this by periodically checking how many servers are waiting
# for a request. If there are fewer than MinSpareServers, it creates
# a new spare. If there are more than MaxSpareServers, some of the
# spares die off. These values are probably OK for most sites ---
MinSpareServers 5
MaxSpareServers 10
# Number of servers to start --- should be a reasonable ballpark figure.
StartServers 5
# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# Unix with it as it spirals down...
MaxClients 150
# MaxRequestsPerChild: the number of requests each child process is
# allowed to process before the child dies.
# The child will exit so as to avoid problems after prolonged use when
# Apache (and maybe the libraries it uses) leak. On most systems, this
# isn't really needed, but a few (such as Solaris) do have notable leaks
# in the libraries.
MaxRequestsPerChild 30
# Proxy Server directives. Uncomment the following line to
# enable the proxy server:
#ProxyRequests On
# To enable the cache as well, edit and uncomment the following lines:
#CacheRoot /var/cache/httpd
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the VirtualHost command
Listen 80
Listen 443
# global ssl setup
SSLSessionCache dbm:/var/log/httpd/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/var/log/httpd/ssl_mutex
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
# uncomment this for debugging
#
#PerlModule Apache::Status
#
#SetHandler perl-script
#PerlHandler Apache::Status
#
PerlFreshRestart On
# VirtualHost: Allows the daemon to respond to requests for more than one
# server address, if your server machine is configured to accept IP packets
# for multiple addresses. This can be accomplished with the ifconfig
# alias flag, or through kernel patches like VIF.
# Any httpd.conf or srm.conf directive may go into a VirtualHost command.
# See also the BindAddress entry.
#
#ServerAdmin webmaster@host.some_domain.com
#DocumentRoot /www/docs/host.some_domain.com
#ServerName host.some_domain.com
#ErrorLog logs/host.some_domain.com-error_log
#TransferLog logs/host.some_domain.com-access_log
#
Header set Content-Language en
UserDir web
NameVirtualHost 213.239.56.162
ServerName www.traderwebs.co.uk
ServerAdmin admin
DocumentRoot /home/sites/site1/web
ServerAlias traderwebs.co.uk
ServerAlias bell
RewriteEngine on
RewriteCond %{HTTP_HOST} !^213.239.56.162(:80)?$
RewriteCond %{HTTP_HOST} !^www.traderwebs.co.uk(:80)?$
RewriteCond %{HTTP_HOST} !^bell(:80)?$
RewriteRule ^/(.*) http://www.traderwebs.co.uk/$1 [L,R]
RewriteOptions inherit
#AliasMatch ^/users/([^/]+)(/(.*))? /home/sites/site1/users/$1/web/$3
#
# www.traderwebs.co.uk/competition
ScriptAlias /competition /home/httpd/cgi-bin/comp.cgi
# worldpay
RewriteRule ^/wcc/(.*)$ https://select.worldpay.com/wcc/$1 [L,R]
# site home dirs
AliasMatch ^/~([^/]+)(/(.*))? /home/sites/$1/web/$3
# site root: /~user/
#Rewrite
RewriteRule ^/~([^/]+)/$ /usr/local/traderwebs/web_store/web_store.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1,E=LOGTHIS:1]
#works
#RewriteRule ^/~([^/]+)/([^.]+).html$ /usr/local/traderwebs/web_store/web_store.cgi?page=$2 [T=application/x-httpd-cgi,L,E=CLIENT:$1,QSA,E=LOGTHIS:1]
#RewriteRule ^/~([^/]+)/([^./]+).html$ /home/sites/$1/store/html/$2.html [L,E=LOGTHIS:1]
# preview root [callbacks :(]
RewriteRule ^/~([^/]+)/preview([^/]*)/$ /usr/local/traderwebs/web_store/web_store.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1,E=PREVIEW:1]
# /~user/wizard/imgpopup - workaround for MSIE's "security"
RewriteRule ^/~([^/]+)/wizard/imgpopup$ /usr/local/traderwebs/web_store/imgpopup.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1]
# /~user/wizard/
RewriteRule ^/~([^/]+)/wizard/$ https://www.traderwebs.co.uk/~$1/wizard/ [L,R]
SSLengine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/traderwebs.2004.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/2004.key
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/entrust.crt
ServerName www.traderwebs.co.uk
ServerAdmin admin
DocumentRoot /home/sites/site1/web
ServerAlias traderwebs.co.uk
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.traderwebs.co.uk(:443)?$
RewriteRule ^/(.*) https://www.traderwebs.co.uk/$1 [L,R]
RewriteOptions inherit
#SetEnvIf User-Agent ".*MSIE.*" \
# nokeepalive \
# ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
#AliasMatch ^/users/([^/]+)(/(.*))? /home/sites/site1/users/$1/web/$3
# site home dirs
AliasMatch ^/~([^/]+)(/(.*))? /home/sites/$1/web/$3
# statistics
RewriteRule ^/~([^/]+)/stats/(.*)$ /home/sites/$1/stats/$2 [L]
#worldpay
RewriteRule ^/wcc/(.*)$ https://select.worldpay.com/wcc/$1 [L,R]
# site root
RewriteRule ^/~([^/]+)/$ /usr/local/traderwebs/web_store/web_store.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1,E=LOGTHIS:1]
#RewriteRule ^/~([^/]+)/([^./]+).html$ /usr/local/traderwebs/web_store/web_store.cgi?page=$2 [T=application/x-httpd-cgi,L,E=CLIENT:$1,QSA,E=LOGTHIS:1]
# preview root
RewriteRule ^/~([^/]+)/preview([^/]*)/$ /usr/local/traderwebs/web_store/web_store.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1,E=PREVIEW:1]
#works
#RewriteRule ^/~([^/]+)/preview[^/]*/([^./]+).html$ /usr/local/traderwebs/web_store/web_store.cgi?page=$2 [T=application/x-httpd-cgi,L,E=CLIENT:$1,E=PREVIEW:1,QSA]
#for testing
#RewriteRule ^/~([^/]+)/preview([^/]*)/([^./]+).html$ /home/sites/$1/store/preview$2/html/$3.html [L,E=LOGTHIS:1]
# passwd
RewriteRule ^/~([^/]+)/wizard/passwd$ /usr/local/traderwebs/web_store/passwd.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1]
# wizard
RewriteRule ^/~([^/]+)/wizard/$ /usr/local/traderwebs/web_store/wizard.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1]
#RewriteRule ^/~([^/]+)/order/(\w+)$ /usr/local/traderwebs/web_store/order/order.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$1,E=ORDER:$2]
#smart thumbnail caching
# imageonly images
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
RewriteRule ^/thumbs/(([A-Za-z0-9]+)/imageonly/)(([A-Za-z0-9]+)(-layout_image=[A-Za-z0-9]*).jpeg) /usr/local/traderwebs/web_store/image.cgi [T=application/x-httpd-cgi,L,E=MASK:mask-$2$5.mask,E=OVER:over2-$2$5.overlay,E=TRANSP:$2--$4-layout_image=transparent.imageonly.ppm,E=OUT:$3,E=DIR:$1]
# real thumbs with images (1.6 million)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
RewriteRule ^/thumbs/(([A-Za-z0-9]+)/([A-Za-z0-9]+)/)(([A-Za-z0-9]+)(-layout_image=[A-Za-z0-9]*).jpeg) /usr/local/traderwebs/web_store/image.cgi [T=application/x-httpd-cgi,L,E=MASK:mask3-$2-$3$6.mask,E=OVER:over3-$2-$3$6.overlay,E=TRANSP:$2-$3-$5-layout_image=transparent.ppm,E=OUT:$4,E=DIR:$1]
# real thumbs with options - including styletemp (degenerate; no overlay)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
RewriteRule ^/thumbs/(([A-Za-z0-9]+)/([A-Za-z0-9]*)/)(([A-Za-z0-9]*)([-=A-Za-z0-9_]*).jpeg) /usr/local/traderwebs/web_store/degen-image.cgi [T=application/x-httpd-cgi,L,E=FILE:$2-$3-$5$6.jpeg,E=OUT:$4,E=DIR:$1]
# colour-cycled degenerate real thumbs (no overlay)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
RewriteRule ^/thumbs/(([A-Za-z0-9]+)/([A-Za-z0-9]*)/)((([0-9]+)rotate\.)([A-Za-z0-9]*)([-=A-Za-z0-9_]*).jpeg) /usr/local/traderwebs/web_store/cycle-image.cgi [T=application/x-httpd-cgi,L,E=FILE:$2-$3-$5$7.jpeg,E=OUT:$4,E=DIR:$1,E=ROTATE:$6]
#RewriteEngine on
##smart thumbnail caching
#
## imageonly images
#RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
#RewriteRule ^/thumbs/(([A-Za-z0-9]+)/imageonly/)(([A-Za-z0-9]+)(-layout_image=[A-Za-z0-9]*).jpeg) /usr/local/traderwebs/web_store/image.cgi [T=application/x-httpd-cgi,L,E=MASK:mask-$2$5.mask,E=OVER:over2-$2$5.overlay,E=TRANSP:$2--$4-layout_image=transparent.imageonly.ppm,E=OUT:$3,E=DIR:$1]
#
## real thumbs with images (1.6 million)
#RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
#RewriteRule ^/thumbs/(([A-Za-z0-9]+)/([A-Za-z0-9]+)/)(([A-Za-z0-9]+)(-layout_image=[A-Za-z0-9]*).jpeg) /usr/local/traderwebs/web_store/image.cgi [T=application/x-httpd-cgi,L,E=MASK:mask3-$2-$3$6.mask,E=OVER:over3-$2-$3$6.overlay,E=TRANSP:$2-$3-$5-layout_image=transparent.ppm,E=OUT:$4,E=DIR:$1]
#
## real thumbs with options - including styletemp (degenerate; no overlay)
#RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-s
#RewriteRule ^/thumbs/(([A-Za-z0-9]+)/([A-Za-z0-9]+)/)(([A-Za-z0-9]+)([-=A-Za-z0-9_]*).jpeg) /usr/local/traderwebs/web_store/degen-image.cgi [T=application/x-httpd-cgi,L,E=FILE:$2-$3-$5$6.jpeg,E=OUT:$4,E=DIR:$1]
use Apache::PerlSections();
#require "/usr/local/traderwebs/web_store/userdb.pl"; ######## FIXME! #########
my %userdb;
use GDBM_File;
defined(tie(%userdb, 'GDBM_File', "/etc/traderwebs.db", &GDBM_READER, 0644)) || die "Failed to open database";
foreach my $user (keys %userdb) { # this is only for clients with registered domain names
my $dom=$userdb{$user};
print STDERR "$user: $dom\n";
if ($dom) {
$PerlConfig.=<
ServerName www.$dom
ServerAdmin admin\@traderwebs.co.uk
DocumentRoot /home/sites/$user/web
ServerAlias $dom
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.$dom(:80)?\$
RewriteRule ^/(.*) http://www.$dom/\$1 [L,R]
RewriteOptions inherit
RewriteRule ^/\$ /usr/local/traderwebs/web_store/web_store.cgi [T=application/x-httpd-cgi,L,E=CLIENT:$user,E=LOGTHIS:1]
#RewriteRule ^/([^./]+).html\$ /usr/local/traderwebs/web_store/web_store.cgi?page=\$1 [T=application/x-httpd-cgi,L,E=CLIENT:$user,QSA,E=LOGTHIS:1]
EOF
}
}
#finaluserdb();
untie %userdb;
#foreach my $client (split ' ',((getgrnam 'client')[3])) { # this is for all clients
# $PerlConfig.=<
#Require user $client
#AuthName Traderwebs
#AuthType Basic
#
#EOF
#}
# print STDERR Apache::PerlSections->dump();
Header set Cache-Control must-revalidate
Header set Pragma no-cache
ExpiresDefault now
ExpiresActive on
Header set Cache-Control must-revalidate
Header set Pragma no-cache
ExpiresDefault now
ExpiresActive on
Header set Cache-Control must-revalidate
Header set Pragma no-cache
ExpiresDefault now
ExpiresActive on
Header set Cache-Control must-revalidate
Header set Pragma no-cache
ExpiresDefault now
ExpiresActive on
# for local testing only!
Header set Cache-Control no-cache
Header set Pragma no-cache
ExpiresDefault now
ExpiresActive on
Header unset Cache-Control
Header unset Pragma
ExpiresActive off
#
#Require group site-adm
#AuthName Traderwebs
#AuthType Basic
#
Options +ExecCGI
#SetHandler Apache::Registry
#
#Require group home
#AuthName Traderwebs
#AuthType Basic
#