Go-FTL is a complete web server and reverse proxy. It supports name based virtual servers with both HTTP and HTTPS (tls/sni) name resolution. A simple interface for developing your own middleware is provided. A large collection of pre-built middleware is available.
Go-FTL is MIT licensed. All of the middleware that is built in is MIT licensed. The libraries that are used are MIT style licensed. For details see the documentation section on licenses.
Go-FTL was developed because another web server had buried in it a required download that was a proprietary license. Given that the other web server claimed to be open source - this hit a nerve and I built Go-FTL.
The documentation for Go-FTL is a Creative Commons Attribution License v. 4.0. The source for the documentation is in the ./doc directory. The website for the server is in the ./website directory and carries the same Creative Commons Attribution license for content (.md and .html files) and MIT license for code (.tc, .js, .go etc).
The Code is MIT licensed, see the LICENSE file.
Go-FTL can be easily built from source or binaries can be downloaded. The pre-compiled binaries are tested on Windows 7, Mac OS X 10.9.5 and Ubuntu Linux 14.04.
To download and install
$ git clone https://github.com/pschlup/Go-FTL.git
$ cd Go-FTL/server/goftl
$ go get
$ go build
Works with Go v1.6.2+. You can download a tar ball with the source in it. Also pre-compiled versions for Windows, Mac and Linux are available. Docker images are planned for the very near future.
Create a configuration in JSON like the following example:
{
"unique-name": {
"listen_to":[ "http://localhost:3111" ],
"plugins":[
{ "file_server": { "Root":"./static", "Paths":"/" } }
]
}
}
Will serve static files from the path ./static
as http://localhost:3111/
.
And start the server:
$ ./goftl -c config.json
Several of the middleware modules use sha256 of the data as the ETag header to guarantee cache consistency. By doing this the Go-FTL server can check that the cached file matches what is in the browsers cache and respond with a 304 Not Modified instead of sending the file. inMemoryCache works in this way. You can specify a set of acceptable and reject URLs and a duration. Each file is sha256 hashed and cached. If the file changes at all then a new one will be provided. Otherwise the 304 Not Modified response is sent.
Yes! 100% raw, unadulterated, Free Open Source Software. The code is MIT licensed. The Documentation is Creative Commons Attribution licensed.
Go-FTL creates a lot of files on /proc/$pid/fd
. In case you see ftl0 crashing, you can see how many files are open by;
$ sudo ls -l /proc/`pgrep ftl0`/fd | wc -l
To find out your personal limit:
$ ulimit -n
To change it:
$ ulimit -n 64000
You can change soft - hard limits by editing /etc/security/limits.conf
.