pound ist ein Reverse-Proxy und Load-Balancer sowie SSL-Wrapper. Die Software steht unter der GNU Public License und kann von der Homepage bezogen werden. Er kann Anfragen von Webclients an einen oder mehrere Webserver weiterleiten. Anhand der URL kann entschieden werden, an welchen Server der Request weitergeleitet wird. Auf diese Weise können hinter dem Reverse-Proxy auf ein und derselben IP-Adresse mehrere Webserver betrieben werden.
/etc/init.d/pound
#!/bin/bash
#
# pound Starts pound Reverse Proxy
#
#
# chkconfig: 2345 88 12
# description: Syslog is the facility by which many daemons use to log \
# messages to various system log files. It is a good idea to always \
# run pound.
### BEGIN INIT INFO
# Provides: $pound
### END INIT INFO
# Source function library.
. /etc/init.d/functions
[ -f /usr/sbin/pound ] || exit 0
[ -f /usr/sbin/poundctl ] || exit 0
# Source config
if [ -f /etc/sysconfig/pound ] ; then
. /etc/sysconfig/pound
else
POUND_CFG=/etc/pound.cfg
POUND_OPTIONS="-v -f $POUND_CFG"
fi
[ -f $POUND_CFG ] || exit 0
RETVAL=0
umask 077
start() {
echo -n $"Starting pound reverse proxy: "
daemon pound $POUND_OPTIONS
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/pound
return $RETVAL
}
stop() {
echo -n $"Shutting down pound: "
killproc pound
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/pound
return $RETVAL
}
rhstatus() {
status pound
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
rhstatus
;;
restart|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/pound ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
exit $?
einface konfiguration für einen dedizierten webserver
ListenHTTP
Address 192.168.10.100
Port 80
Service
BackEnd
Address 192.168.10.102
Port 80
End
End
End
Pound unterstützt das Filtern nach Anfragen sowohl basierend auf der “Request-URL” als auch auf der Präsenz oder dem Fehlen von bestimmten Headern.
Angenommen wir haben einen internen Server 192.168.0.10, der www.server0.com bedienen soll und 192.168.0.11 der www.server1.com bedienen soll. Pound hört auf die Adresse 1.2.3.4 und teilt die Anfragen auf jeden Host auf.
virtual hosts example
ListenHTTP
Address 1.2.3.4
Port 80
Service
HeadRequire "Host: .*www.server0.com.*"
BackEnd
Address 192.168.0.10
Port 80
End
End
Service
HeadRequire "Host: .*www.server1.com.*"
BackEnd
Address 192.168.0.11
Port 80
End
End
End
(add whatever else is necessary) or, if you want even safer filtering:
ListenHTTP
Address 1.2.3.4
Port 80
Service
HeadRequire "Host: .*www.server0.com.*"
HeadDeny "Host: .*www.server1.com.*"
BackEnd
Address 192.168.0.10
Port 80
End
End
Service
HeadRequire "Host: .*www.server1.com.*"
HeadDeny "Host: .*www.server0.com.*"
BackEnd
Address 192.168.0.11
Port 80
End
End
End
Diese Konfiguration ist lt. Hersteller nicht empfohlen, da virtual Hosts im Backend konfiguriert werden sollten, aber das Beispiel zeigt, dass es dennoch möglich ist.