mirror of
https://github.com/graygnuorg/pound.git
synced 2026-10-28 11:35:07 +03:00
396 lines
14 KiB
Plaintext
396 lines
14 KiB
Plaintext
FREQUENTLY ASKED QUESTIONS
|
|
|
|
1. General
|
|
==========
|
|
|
|
1.1 Will Pound run my Web application?
|
|
|
|
No. Pound is a proxy, not a Web server - it does not deliver content by
|
|
itself. It is just the middle-man between a client and a server.
|
|
|
|
1.2 Will Pound make my server go faster?
|
|
|
|
No. Pound is just a proxy - no caching of any kind takes place. Pound
|
|
IS able to distribute requests between several back-end servers, thus
|
|
allowing for faster overall response times, but it won't speed-up a
|
|
single Web sever.
|
|
|
|
1.3 Will Pound make my server more secure?
|
|
|
|
Probably yes. Pound has its own checks on the validity of HTTP requests
|
|
and often catches malicious requests that are used to attack Web servers.
|
|
|
|
1.4 Can I use Pound to change/rewrite/redirect requests?
|
|
|
|
No. Pound tries to be as transparent as possible - ideally a client
|
|
should not be aware that there is anything between itself and the actual
|
|
Web server. A limited form of redirect is available - see the man page.
|
|
|
|
1.5 Can I use Pound to deny certain requests?
|
|
|
|
Yes. Pound has a rather good mechanism for classifying requests and it
|
|
can deny/reject certain requests based on URL and/or header content.
|
|
|
|
|
|
2. Configuration, Compilation and Installation
|
|
==============================================
|
|
|
|
2.1 I try to compile and it fails on "needs OpenSSL with thread support"
|
|
|
|
Pound is a multi-threaded program and it needs an OpenSSL library
|
|
compiled with thread support (optional in the OpenSSL configuration and
|
|
absent in some default installations, such as *BSD). If your default
|
|
library does not support threads you must install a thread-enabled
|
|
version.
|
|
|
|
2.2 Pound compiles correctly but crashes on *BSD
|
|
|
|
On some of the newer versions of *BSD (FreeBSD 5.x, OpenBSD 3.x) the
|
|
Pound autoconf may not correctly recognize the threading library. Add
|
|
manually to the generated Makefile the option -DNEED_STACK in the
|
|
CFLAGS.
|
|
|
|
2.3 I want to run Pound with daemon-tools but it goes to background
|
|
|
|
You need to configure Pound for non-daemon operations: add "Daemon 0"
|
|
to the config file.
|
|
|
|
2.4 Pound runs OK but some normal requests are rejected with "bad URL"
|
|
|
|
Pound checks the requested URLs quite thoroughly and rejects malformed
|
|
or illegal URLs - or at least illegal according to the RFCs. See the
|
|
man page for details.
|
|
|
|
2.5 Pound runs OK but I get a "pthread_create" error message
|
|
|
|
You may be hitting the system limit on the number of processes. On
|
|
systems that implement threads as processes (as Linux does) you should
|
|
make sure that the Pound process has permission to start a sufficient
|
|
number of processes.
|
|
|
|
In some rare cases you may be running into the system limit on the
|
|
number of threads. Check your system details for the value of
|
|
PTHREAD_THREADS_MAX. If needed you must recompile the threads library
|
|
with a higher value.
|
|
|
|
2.6 What resources does Pound need/use?
|
|
|
|
That depends very much on your system. On some systems, such as Linux
|
|
and System V (AIX, HP-UX, etc), threads are implemented as processes,
|
|
which means you must allow enough processes to run. On other systems,
|
|
such as *BSD, where threads are implemented in user space (in-process),
|
|
you should make sure that Pound can use sufficient memory for all the
|
|
threads and that the process is allowed to use enough file descriptors
|
|
(2 per active connection). Finally, on systems that implement threads
|
|
natively, such as Solaris, you need to make sure that enough threads
|
|
and open file descriptors are allowed.
|
|
|
|
2.7 Is NPTL supported?
|
|
|
|
Theoretically Pound will work with any POSIX-compliant threads package.
|
|
In practice some of the newer NPTL implementations still have some
|
|
bugs. At least on Linux running Pound with LD_ASSUME_KERNEL=2.4.19
|
|
may be helpful.
|
|
|
|
|
|
3. Virtual Hosts
|
|
================
|
|
|
|
3.1 How do I redirect specific virtual hosts to specific back-ends?
|
|
|
|
Make the virtual host mandatory in the UrlGroup. For example, to have
|
|
all requests to www.a.com go to 192.168.0.10 and all requests for
|
|
www.b.com go to 192.168.0.20, define
|
|
|
|
Service
|
|
HeadRequire "Host:.*www.a.com.*"
|
|
BackEnd
|
|
Address 192.168.0.10
|
|
Port 80
|
|
End
|
|
End
|
|
|
|
Service
|
|
HeadRequire "Host:.*www.b.com.*"
|
|
BackEnd
|
|
Address 192.168.0.20
|
|
Port 80
|
|
End
|
|
End
|
|
|
|
in your config file.
|
|
|
|
3.2 How do I redirect requests to specific back-ends based on the client
|
|
address?
|
|
|
|
You can do it easier via the packet filter you use. If you insist on
|
|
having Pound do it use a combination of port redirection and separate
|
|
instances of Pound for each port. For example, assume you want intranet
|
|
clients (on 192.168.100.0/24) to use the server at 192.168.1.10 and
|
|
external clients go to 192.168.1.20. Do the following:
|
|
|
|
- redirect requests from 192.168.100.0/24 to port 8080
|
|
|
|
pf: rdr on rl0 from 192.168.100.0/24 to 192.168.100.1 port 80 \
|
|
-> localhost port 8080
|
|
|
|
netfilter: iptables -t nat -A PREROUTING -p tcp \
|
|
-s 192.168.100.0/24 --dport 80 -i eth0 -j DNAT \
|
|
--to localhost:8080
|
|
|
|
- redirect requests from anywhere else to port 8081
|
|
|
|
pf: rdr on rl0 from any to 192.168.100.1 port 80 \
|
|
-> localhost port 8081
|
|
|
|
netfilter: iptables -t nat -A PREROUTING -p tcp \
|
|
--dport 80 -i eth0 -j DNAT --to localhost:8081
|
|
|
|
- have a Pound listener on port 8080 and sending the
|
|
requests to 192.168.1.10
|
|
|
|
- have a Pound listener on port 8081 and sending the
|
|
requests to 192.168.1.20
|
|
|
|
3.3 What happens when my server replies with a redirect?
|
|
|
|
Depending on configuration, Pound can watch for redirect replies from back-ends
|
|
and change them to the correct address. In order for this to happen the
|
|
following conditions must be met:
|
|
|
|
- Pound has "Check30x 1"
|
|
- the back-end replies with a redirect. The address of that URL resolves to
|
|
the same address as the one Pound is listening on or the address of the
|
|
back-end itself.
|
|
|
|
This feature is commonly used when Pound serves as a HTTPS wrapper,
|
|
as the backend redirect to "Location: http://x.y.com" is rewritten as
|
|
"Location: https://x.y.com".
|
|
|
|
|
|
4. HTTPS
|
|
========
|
|
|
|
4.1 Can I have Pound force HTTPS connections to certain URLs/back-ends?
|
|
|
|
Yes - define a Service with a Redirect back-end.
|
|
|
|
4.2 How can I do virtual hosting with HTTPS?
|
|
|
|
The simple answer is that neither you, nor anybody else can, due to a
|
|
limitation of the HTTPS protocol. In its simplest form an HTTPS (SSL)
|
|
connection goes through the following stages:
|
|
|
|
- negotiation: the client contacts the server, receives a certificate
|
|
from it, and negotiates the protocol details (cipher parameters, etc).
|
|
|
|
- authentication: the client checks that the certificate received matches
|
|
the server it wanted and validates that the certificate is correct as
|
|
attested by some certificate authority.
|
|
|
|
- request/response: normal HTTP, encrypted in transit.
|
|
|
|
As you can see the certificate is sent before any request was received.
|
|
Unfortunately, the first request specifies the virtual host that the
|
|
client would like to talk to - and it may not match the server name in
|
|
the certificate.
|
|
|
|
4.3 Pound does not start with message "can't read private key"
|
|
|
|
The file you specify in the ListenHTTPS directive must contain both the
|
|
server certificate and the private key to it in PEM format. See the man
|
|
page for SSL_CTX_use_PrivateKey_file(3) for details.
|
|
|
|
4.4 How can a back-end know that the connection is via HTTPS?
|
|
|
|
Pound can add a header for incoming requests indicating that they were
|
|
received via HTTPS. See the details on AddHeader in the man page.
|
|
|
|
4.5 HTTPS connections fail when Pound runs chrooted
|
|
|
|
The OpenSSL library requires access to /dev/urandom for its random seed.
|
|
The normal device is not accessible in a jail root. You should add a
|
|
link to the device to make it accessible. On Linux this would be:
|
|
|
|
mknod /var/pound/dev/urandom c 1 9
|
|
|
|
assuming that /var/pound is the root jail.
|
|
|
|
4.6 How can I force a back-end to generate the correct URL with HTTPS
|
|
|
|
There is no simple answer to this question - each server and application
|
|
have their own way of doing things. If your server does not use absolute
|
|
paths then all is well - things will run out of the box. However if some
|
|
frames, images, links or a base tag are generated with an absolute path
|
|
you must find a way to force the generation with https://.
|
|
|
|
4.7 How can I find out about the client certificate in my application?
|
|
|
|
For requests via HTTPS connections Pound can add the details of the
|
|
client certificate as headers to each and every request it passes to
|
|
the back-end. See the details on HTTPSHeaders in the man page.
|
|
|
|
4.8 Can Pound use my crypto accelerator hardware?
|
|
|
|
Pound supports the OpenSSL engine architecture. If your crypto card is
|
|
supported by OpenSSL then it is supported by Pound. See the SSLEngine
|
|
directive in the man page.
|
|
|
|
4.9 Can Pound use HTTPS back-end servers?
|
|
|
|
Yes, but that is not always a very good idea. Such a setup would essentially
|
|
make Pound into a "man-in-the-middle" program. Even worse, the certificates
|
|
on the back-end would become meaningless - they are seen only by Pound.
|
|
|
|
|
|
5. Session tracking
|
|
===================
|
|
|
|
5.1 Can I have session tracking based on URL and/or Cookie?
|
|
|
|
Pound can track sessions based on client IP address, a cookie, an URL
|
|
parameter or BasicAuthentication. These options are mutually exclusive -
|
|
only one of them can be used per UrlGroup.
|
|
|
|
5.2 When does a session expire?
|
|
|
|
A session is kept for the specified number of seconds. If during this
|
|
time no new request was received the session is discarded.
|
|
|
|
5.3 Does Pound create/track its own sessions?
|
|
|
|
No. Pound does not add anything to the requests or the responses - it
|
|
uses the tokens generated by the back-end servers exclusively.
|
|
|
|
|
|
6. Logging
|
|
==========
|
|
|
|
6.1 Can I use Webalizer on Pound log files?
|
|
|
|
Yes. If you use LogLevel 3 or 4 Pound uses one of the standard log
|
|
formats that are recognized by applications such as Webalizer. You will
|
|
have to remove the time-stamp generated by the syslog - see cut(1) for
|
|
details.
|
|
|
|
6.2 How do I log the original client address in the back-end log?
|
|
|
|
Pound adds the X-Forwarded-for header with the original client address
|
|
to every request. Use it for your logs on the back-end servers.
|
|
|
|
6.3 How can I separate the Pound log from other syslog messages?
|
|
|
|
If you use the syslog facility you can configure it to send the pound
|
|
messages to a separate file. You may want to separate by severity as
|
|
well - normal log messages use LOG_INFO, everything else is not request
|
|
information. See syslogd(8) for details on how to configure it.
|
|
|
|
6.4 How can I separate error messages from normal log messages?
|
|
|
|
If you use syslog: normal requests are logged at LOG_INFO, everything
|
|
else is higher.
|
|
|
|
If you run without syslog: normal request logging to stdout, everything
|
|
else to stderr.
|
|
|
|
6.5 Why does Pound not log anything when chrooted?
|
|
|
|
On some systems you need access to /dev/log in order to use the syslog(8)
|
|
facility. Create/link the device as needed in the root jail you use.
|
|
|
|
6.6 Why can't Pound log directly to a file?
|
|
|
|
This is a security requirement. As things stand, Pound does not write at
|
|
all to the disk. The existing tools - such as syslog - allow all the
|
|
flexibility one could wish for.
|
|
|
|
If you absolutely must you can try the patches from Shinji Tanaka (see
|
|
http://www.hatena-inc.co.jp/~stanaka/pound/ for details).
|
|
|
|
|
|
7. WebDAV
|
|
=========
|
|
|
|
7.1 I compiled Pound with DAV support but it still rejects the requests
|
|
|
|
You also need to define "WebDAV 1" in your config file, and (depending on
|
|
your server or application) "xHTTP 1" as well.
|
|
|
|
7.3 Can I use Pound as a front-end for Subversion?
|
|
|
|
Yes. You may have some problems with using it via HTTPS, but HTTP should
|
|
work.
|
|
|
|
|
|
8. Zope
|
|
=======
|
|
|
|
8.1 What configurations is Pound most helpful for?
|
|
|
|
If you have several servers running on top of a ZEO server, Pound will
|
|
allow you to load-balance between them (BTW, this was the original
|
|
motivation for developing Pound). Pound also makes for a very good,
|
|
light-weight front-end for a single Zope - exposing the Zope Web-server
|
|
directly on the big, bad Internet is not a very good idea.
|
|
|
|
8.2 Can I have virtual hosts in Zope without Apache?
|
|
|
|
Yes. Despite persistent rumors, the Virtual Host Monster works perfectly
|
|
well on its own (dark incantations at midnight under the shade of the
|
|
cross-shaped oak branch are NOT required). All you need to do is to
|
|
add a VHM in the Zope root, click on the Mappings tab and add whatever
|
|
hosts you need.
|
|
|
|
8.3 Can I have HTTPS for Zope?
|
|
|
|
Yes. Pound will happily pass SSL requests to Zope. You have three possible
|
|
methods to force Zope to generate responses with the https:// prefix:
|
|
|
|
- if all you need is a specific area to be accessible only through HTTPS
|
|
you can add a SiteRoot with the correct name.
|
|
|
|
- alternately the Pound distribution includes patches for z2.py that
|
|
include a new -y flag for a "https://" port.
|
|
|
|
- finally, for version 2.7 or later you can set it in zope.conf.
|
|
|
|
8.4 Can I force HTTPS for certain areas in Zope?
|
|
|
|
Yes. Add a check for the SSL-specific headers in the dtml_header or
|
|
whatever equivalent you use. See the details on HTTPSHeaders in the man
|
|
page.
|
|
|
|
|
|
9. Miscellaneous/MS
|
|
===================
|
|
|
|
9.1 IE fails to connect to Pound via HTTPS
|
|
|
|
Define the ciphers to be
|
|
|
|
"ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL"
|
|
|
|
in the config file. We have had reports of IE problems with other
|
|
ciphers.
|
|
|
|
9.2 IE has big delays in getting replies from Pound
|
|
|
|
Try a shorter Client timeout. IE uses exactly 4 sockets, and as long as
|
|
they stay open it won't do anything else. A short Client value will
|
|
force the socket(s) to be closed earlier, thus avoiding annoying waits.
|
|
|
|
9.3 I try to run MS OWA and Pound rejects the requests
|
|
|
|
Make sure you configured Pound with --enable-msdav. Make sure you
|
|
included "WebDAV 1" in the config file. Pray that MS would adhere to
|
|
some known standard. Repeat as necessary.
|
|
|
|
9.4 How can I force OWA to accept HTTPS requests?
|
|
|
|
Make sure to define
|
|
|
|
AddHeader "Front-End-Https: on"
|
|
|
|
in the config file. This will force OWA to generate the responses with
|
|
the correct protocol.
|