Skip to content

Commit

Permalink
Update readme: add introduction, markdown.
Browse files Browse the repository at this point in the history
  • Loading branch information
emikulic committed Jan 17, 2021
1 parent fdf28d2 commit 1845a4a
Showing 1 changed file with 110 additions and 28 deletions.
138 changes: 110 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,145 @@
How to build darkhttpd
----------------------
# darkhttpd

https://unix4lyfe.org/darkhttpd/

When you need a web server in a hurry.

Features:
* Simple to set up:
* Single binary, no other files, no installation needed.
* Standalone, doesn't need `inetd` or `ucspi-tcp`.
* No messing around with config files - all you have to specify is the `www` root.
* Written in C - efficient and portable.
* Small memory footprint.
* Event loop, single threaded - no fork() or pthreads.
* Generates directory listings.
* Supports HTTP GET and HEAD requests.
* Supports Range / partial content. (try streaming music files or resuming a download)
* Supports If-Modified-Since.
* Supports Keep-Alive connections.
* Supports IPv6.
* Can serve 301 redirects based on Host header.
* Uses sendfile() on FreeBSD, Solaris and Linux.
* Can use acceptfilter on FreeBSD.
* At some point worked on FreeBSD, Linux, OpenBSD, Solaris.
* ISC license.
* suckless.org says [darkhttpd sucks less](http://suckless.org/rocks/).

Security:
* Can log accesses, including Referer and User-Agent.
* Can chroot.
* Can drop privileges.
* Impervious to `/../` sniffing.
* Times out idle connections.
* Drops overly long requests.

Limitations:
* Only serves static content - no CGI.

## How to build darkhttpd

Simply run make:
$ make

```
make
```


How to run darkhttpd
--------------------
## How to run darkhttpd

Serve /var/www/htdocs on the default port (80 if running as root, else 8080):
$ ./darkhttpd /var/www/htdocs

Serve ~/public_html on port 8081:
$ ./darkhttpd ~/public_html --port 8081
```
./darkhttpd /var/www/htdocs
```

Serve `~/public_html` on port 8081:

```
./darkhttpd ~/public_html --port 8081
```

Only bind to one IP address (useful on multi-homed systems):
$ ./darkhttpd ~/public_html --addr 192.168.0.1

```
./darkhttpd ~/public_html --addr 192.168.0.1
```

Serve at most 4 simultaneous connections:
$ ./darkhttpd ~/public_html --maxconn 4

```
./darkhttpd ~/public_html --maxconn 4
```

Log accesses to a file:
$ ./darkhttpd ~/public_html --log access.log

```
./darkhttpd ~/public_html --log access.log
```

Chroot for extra security (you need root privs for chroot):
$ ./darkhttpd /var/www/htdocs --chroot

```
./darkhttpd /var/www/htdocs --chroot
```

Use default.htm instead of index.html:
$ ./darkhttpd /var/www/htdocs --index default.htm

```
./darkhttpd /var/www/htdocs --index default.htm
```

Add mimetypes - in this case, serve .dat files as text/plain:
$ cat extramime
text/plain dat
$ ./darkhttpd /var/www/htdocs --mimetypes extramime

```
$ cat extramime
text/plain dat
$ ./darkhttpd /var/www/htdocs --mimetypes extramime
```

Drop privileges:
$ ./darkhttpd /var/www/htdocs --uid www --gid www

```
./darkhttpd /var/www/htdocs --uid www --gid www
```

Use acceptfilter (FreeBSD only):
$ kldload accf_http
$ ./darkhttpd /var/www/htdocs --accf

```
kldload accf_http
./darkhttpd /var/www/htdocs --accf
```

Run in the background and create a pidfile:
$ ./darkhttpd /var/www/htdocs --pidfile /var/run/httpd.pid --daemon

```
./darkhttpd /var/www/htdocs --pidfile /var/run/httpd.pid --daemon
```

Web forward (301) requests for some hosts:
$ ./darkhttpd /var/www/htdocs --forward example.com http://www.example.com \
--forward secure.example.com https://www.example.com/secure

```
./darkhttpd /var/www/htdocs --forward example.com http://www.example.com \
--forward secure.example.com https://www.example.com/secure
```

Web forward (301) requests for all hosts:
$ ./darkhttpd /var/www/htdocs --forward example.com http://www.example.com \
--forward-all http://catchall.example.com

```
./darkhttpd /var/www/htdocs --forward example.com http://www.example.com \
--forward-all http://catchall.example.com
```

Commandline options can be combined:
$ ./darkhttpd ~/public_html --port 8080 --addr 127.0.0.1

```
./darkhttpd ~/public_html --port 8080 --addr 127.0.0.1
```

To see a full list of commandline options,
run darkhttpd without any arguments:
$ ./darkhttpd

vim:set ts=2 sw=2 et tw=80:
```
./darkhttpd
```

Enjoy.

0 comments on commit 1845a4a

Please sign in to comment.