#!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Generate a minimal HTTPD configuration here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here` mkdir -p $1 root=`echo "import os; print os.path.realpath('$1')" | python` host=$2 port=`$here/httpd-addr port $3` pport=`$here/httpd-addr pport $3` listen=`$here/httpd-addr listen $3` vhost=`$here/httpd-addr vhost $3` if [ "$pport" = "80" ]; then pportsuffix="" else pportsuffix=":$pport" fi mkdir -p $4 htdocs=`echo "import os; print os.path.realpath('$4')" | python` user=`id -un` group=`id -gn` uname=`uname -s` if [ $uname = "Darwin" ]; then libsuffix=".dylib" sendfile=Off else libsuffix=".so" sendfile=On fi modules_prefix=`cat $here/httpd-modules.prefix` mkdir -p $root mkdir -p $root/logs mkdir -p $root/conf cat >$root/conf/httpd.conf <s %b \"%{Referer}i\" \"%{User-agent}i\" \"%{cookie}n\" %A %V %D %I %O %{mod_security-message}i" combined Include conf/log.conf # Configure Mime types and default charsets TypesConfig $here/conf/mime.types AddDefaultCharset utf-8 AddCharset utf-8 .html .js .css # Configure cache control SetEnvIf X-Cache-Control no-cache x-no-cache Header merge Cache-Control max-age=604800 env=!x-no-cache Header merge Cache-Control public env=!x-no-cache # Enable Linux Kernel sendfile EnableSendFile $sendfile # Configure auth modules Include conf/auth.conf # Set default document root DocumentRoot $htdocs DirectoryIndex index-min.html index.html # Protect server files Options None AllowOverride None Require all denied # Configure output filters to enable compression and rate limiting #SetOutputFilter RATE_LIMIT;DEFLATE SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html BrowserMatch ^check_http/ check_http SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary #SetEnv rate-limit 400 # Listen on HTTP port Listen $listen # Setup HTTP virtual host ServerName http://$host$pportsuffix RewriteEngine on Include conf/hostcond.conf RewriteCond %{HTTP:X-Forwarded-Server} ^$ [NC] RewriteCond %{REQUEST_URI} !^/server-status [NC] RewriteCond %{REQUEST_URI} !^/balancer-manager [NC] RewriteCond %{REQUEST_URI} !^/proxy/ [NC] RewriteRule .* http://$host$pportsuffix%{REQUEST_URI} [R] Include conf/svhost.conf # Configure authentication Include conf/noauth.conf Include conf/locauth.conf Include conf/pubauth.conf Include conf/adminauth.conf EOF # Configure logging cat >$root/conf/log.conf <$root/conf/mpm.conf <$root/conf/modules.conf < LoadModule log_config_module ${modules_prefix}/modules/mod_log_config.so LoadModule logio_module ${modules_prefix}/modules/mod_logio.so LoadModule usertrack_module ${modules_prefix}/modules/mod_usertrack.so LoadModule vhost_alias_module ${modules_prefix}/modules/mod_vhost_alias.so LoadModule cgi_module ${modules_prefix}/modules/mod_cgi.so LoadModule actions_module ${modules_prefix}/modules/mod_actions.so LoadModule unixd_module ${modules_prefix}/modules/mod_unixd.so LoadModule session_module ${modules_prefix}/modules/mod_session.so LoadModule session_crypto_module ${modules_prefix}/modules/mod_session_crypto.so LoadModule slotmem_shm_module ${modules_prefix}/modules/mod_slotmem_shm.so LoadModule ratelimit_module ${modules_prefix}/modules/mod_ratelimit.so LoadModule reqtimeout_module ${modules_prefix}/modules/mod_reqtimeout.so LoadModule ssl_module ${modules_prefix}/modules/mod_ssl.so EOF # Generate auth configuration cat >$root/conf/auth.conf <$root/conf/locauth.conf < Options FollowSymLinks Require all granted # Allow authorized access to root location Options FollowSymLinks AuthUserFile "$root/conf/httpd.passwd" AuthGroupFile "$root/conf/httpd.groups" Require all granted EOF cat >$root/conf/pubauth.conf < AuthType None Session Off Require all granted Session Off AuthType None Session Off Require all granted Session Off AuthType None Session Off Require all granted AuthType None Session Off Require all granted AuthType None Session Off Require all granted AuthType None Session Off Require all granted EOF cat >$root/conf/adminauth.conf < Require user admin EOF # Create password and group files cat >$root/conf/httpd.passwd <$root/conf/httpd.groups <$root/conf/noauth.conf < AuthType None Session Off Require all granted # Allow everyone to access root location AuthType None Session Off Require all granted EOF # Generate vhost configuration cat >$root/conf/vhost.conf < SetHandler server-status HostnameLookups on EOF cat >$root/conf/svhost.conf <$root/conf/dvhost.conf <$root/conf/hostcond.conf <