---
name: "Perlbal::Manual::WebServer"
section: "3pm"
platform: "linux"
package: "libperlbal-perl"
version: "1.80-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Perlbal::Manual::WebServer"
---

# Perlbal::Manual::WebServer(3pm)

Configuring Perlbal as a Web Server

## NAME

Perlbal::Manual::WebServer - Configuring Perlbal as a Web Server

### VERSION

Perlbal 1.78.

### DESCRIPTION

How to configure a Perlbal Web Server service.

### READ ME FIRST

Please read Perlbal::Manual::Configuration first for a better explanation on how to configure Perlbal. This document will make much more sense after reading that.

### Configuring Perlbal as a Web Server

By default, perlbal looks for a configuration file at */etc/perlbal/perlbal.conf*.

You can also point perlbal at a different configuration file with the **-c** flag.

```
    $ perlbal -c /home/user/perlbal.conf
```

Here's a very simple example where we configure a simple web server that serves an index file under /tmp

```
    CREATE SERVICE perlbal_test
        SET role           = web_server
        SET listen         = 0.0.0.0:80
        SET docroot        = /tmp
    ENABLE perlbal_test
```

The first line creates a service called `"perlbal_test"`. The last line enables that service.

The three parameters state - in order - that the service is a web server, that it listens on all addresses on port 80, and that its document root is `"/tmp"`.

### Parameters

You can set parameters via commands of either forms:

```
    SET <service-name> <param> = <value>
    SET <param> = <value>
```

- **dirindexing** = bool

  Show directory indexes when an HTTP request is for a directory. Warning: this is not an async operation, so will slow down Perlbal on heavily loaded sites.

  Default if false.

- **docroot** = directory/root

  Directory root for web server.

- **enable\_concatenate\_get** = bool

  Enable Perlbal's multiple-files-in-one-request mode, where a client have use a comma-separated list of files to return, always in text/plain.

  Useful for web apps which have dozens/hundreds of tiny css/js files, and don't trust browsers/etc to do pipelining.

  Decreases overall round-trip latency a bunch, but requires app to be modified to support it. See t/17-concat.t test for details.

  Default is false.

- **enable\_md5** = bool

  Enable verification of the Content-MD5 header in HTTP PUT requests.

  Default is true.

- **enable\_delete** = bool

  Enable HTTP DELETE requests.

  Default is false.

- **enable\_put** = bool

  Enable HTTP PUT requests.

  Default is false.

- **index\_files** = comma-separated list of filenames

  Comma-separated list of filenames to load when a user visits a directory URL, listed in order of preference.

  Default is index.html.

- **max\_put\_size** = size

  The maximum content-length that will be accepted for a PUT request, if enable\_put is on.

  Default is 0, which means there is no limit.

- **min\_put\_directory** = int

  If PUT requests are enabled, require this many levels of directories to already exist. If not, fail.

  Default is 0.

- **server\_tokens** = bool

  Whether to provide a "Server" header.

  Perlbal by default adds a header to all replies (such as the web\_server role). By setting this default to "off", you can prevent Perlbal from identifying itself.

  Default is `"on"`.

### SEE ALSO

Perlbal::Manual::Configuration, Perlbal::Manual::Management.
