tinyproxy - a light-weight HTTP/HTTPS proxy daemon for POSIX operating systems
Go to file
rofl0r b935dc85c3 simplify codebase by using one thread/conn, instead of preforked procs
the existing codebase used an elaborate and complex approach for
its parallelism:

5 different config file options, namely

- MaxClients
- MinSpareServers
- MaxSpareServers
- StartServers
- MaxRequestsPerChild

were used to steer how (and how many) parallel processes tinyproxy
would spin up at start, how many processes at each point needed to
be idle, etc.
it seems all preforked processes would listen on the server port
and compete with each other about who would get assigned the new
incoming connections.
since some data needs to be shared across those processes, a half-
baked "shared memory" implementation was provided for this purpose.
that implementation used to use files in the filesystem, and since
it had a big FIXME comment, the author was well aware of how hackish
that approach was.

this entire complexity is now removed. the main thread enters
a loop which polls on the listening fds, then spins up a new
thread per connection, until the maximum number of connections
(MaxClients) is hit. this is the only of the 5 config options
left after this cleanup. since threads share the same address space,
the code necessary for shared memory access has been removed.
this means that the other 4 mentioned config option will now
produce a parse error, when encountered.

currently each thread uses a hardcoded default of 256KB per thread
for the thread stack size, which is quite lavish and should be
sufficient for even the worst C libraries, but people may want
to tweak this value to the bare minimum, thus we may provide a new
config option for this purpose in the future.
i suspect that on heavily optimized C libraries such a musl, a
stack size of 8-16 KB per thread could be sufficient.

since the existing list implementation in vector.c did not provide
a way to remove a single item from an existing list, i added my
own list implementation from my libulz library which offers this
functionality, rather than trying to add an ad-hoc, and perhaps
buggy implementation to the vector_t list code. the sblist
code is contained in an 80 line C file and as simple as it can get,
while offering good performance and is proven bugfree due to years
of use in other projects.
2019-12-21 00:43:45 +00:00
data data: Cleanup installation of templates 2009-09-13 04:08:06 +05:30
docs simplify codebase by using one thread/conn, instead of preforked procs 2019-12-21 00:43:45 +00:00
etc simplify codebase by using one thread/conn, instead of preforked procs 2019-12-21 00:43:45 +00:00
m4macros configure: remove checks for standard types 2016-12-21 21:16:06 +00:00
scripts build: add new version mechanism based on VERSION file and a version.sh script 2018-09-05 00:56:31 +02:00
src simplify codebase by using one thread/conn, instead of preforked procs 2019-12-21 00:43:45 +00:00
tests simplify codebase by using one thread/conn, instead of preforked procs 2019-12-21 00:43:45 +00:00
.gitignore add 'compile' to gitignore 2016-12-24 03:04:50 +01:00
.travis.yml Enable travis-ci: add .travis.yml 2016-12-24 02:54:26 +01:00
AUTHORS Update AUTHORS 2018-09-01 04:06:59 +02:00
autogen.sh Remove AM_MAINTAINER_MODE 2009-12-08 10:52:17 +05:30
ChangeLog Add placeholder ChangeLog to keep automake happy 2016-12-20 19:22:17 +01:00
configure.ac build: Remove now unused TINYPROXY_UNSTABLE variable from configure 2018-09-05 01:34:51 +02:00
COPYING [BB#53] Add a GPLv2 COPYING file 2009-08-04 04:21:46 +05:30
Makefile.am build: add new version mechanism based on VERSION file and a version.sh script 2018-09-05 00:56:31 +02:00
NEWS NEWS: just mention to use git log 2018-09-01 04:06:59 +02:00
README README: add README pointing to README.md to make automake happy 2016-12-20 19:22:17 +01:00
README.md Update README.md 2017-11-16 01:05:54 +01:00
tinyproxy-indent.sh Add Tinyproxy indent script 2009-09-15 01:00:50 +05:30
TODO Remove suggester (see Banu RT #138) 2014-05-01 13:58:54 +05:30
VERSION start work on 1.11.x 2019-12-21 00:43:45 +00:00

Tinyproxy

Tinyproxy is a small, efficient HTTP/SSL proxy daemon released under the GNU General Public License. Tinyproxy is very useful in a small network setting, where a larger proxy would either be too resource intensive, or a security risk. One of the key features of Tinyproxy is the buffering connection concept. In effect, Tinyproxy will buffer a high speed response from a server, and then relay it to a client at the highest speed the client will accept. This feature greatly reduces the problems with sluggishness on the Internet. If you are sharing an Internet connection with a small network, and you only want to allow HTTP requests to be allowed, then Tinyproxy is a great tool for the network administrator.

For more info, please visit the Tinyproxy web site.

Installation

Tinyproxy uses a standard GNU configure script based on the automake system. If compiling from a git checkout, you need to first run

./autogen.sh

from the top level directory to generate the configure script. The release tarball contains the pre-created configure script, so when building from a release, you can skip this step. Then basically all you need to do is

./configure
make
make install

in the top level directory to compile and install Tinyproxy. There are additional command line arguments you can supply to configure. They include:

  • --enable-debug: If you would like to turn on full debugging support.

  • --enable-xtinyproxy: Compile in support for the XTinyproxy header, which is sent to any web server in your domain.

  • --enable-filter: Allows Tinyproxy to filter out certain domains and URLs.

  • --enable-upstream: Enable support for proxying connections through another proxy server.

  • --enable-transparent: Allow Tinyproxy to be used as a transparent proxy daemon.

  • --enable-reverse: Enable reverse proxying.

  • --with-stathost=HOST: Set the default name of the stats host.

For more information about the build system, read the INSTALL file that is generated by autogen.sh and comes with the release tar ball.

Support

If you are having problems with Tinyproxy, please raise an issue on github.

Contributing

If you would like to contribute a feature, or a bug fix to the Tinyproxy source, please clone the git repository from github and create a pull request.

Community

You can meet developers and users to discuss development, patches and deployment issues in the #tinyproxy IRC channel on Freenode (irc.freenode.net).