Lighttpd Client Side Optimization With mod_expire To Control / Set The Expire HTTP Headers

The last time I wrote about Lighttpd optimization tips here and here.

You must optimize server side as well as client side. Client side optimization includes CSS code, javascript and images as they would hardly change.

You can force client web browser not to download files for particular day / hour.

Lighttpd comes with mod_expire module. It controls the Expire header in the Response Header of HTTP/1.0 messages. It is useful to set it for static files which should be cached aggressively like images, stylesheets, java scripts, pdf files or similar.

Step # 1: Make sure mod_expire is active

Open lighttpd config file /etc/lighttpd/lighttpd.conf, using a text editor such as vi:
# vi /etc/lighttpd/lighttpd.conf
You must load mod_expire before all other module to avoid ill side effects.

server.modules              = (
                               "mod_expire",
                               "mod_redirect",
                               "mod_alias",
                               "mod_rewrite",
                               "mod_access",
                               "mod_auth",
                               "mod_status",
                               "mod_fastcgi",
                               "mod_compress",
                               "mod_accesslog" )

Step # 2: Set expiration for /js/ and other dirs

Assigns a expiration to all files below the specified path:

## js - java script, css, figs directory in days ###
  expire.url = (
                  "/js/"     => "access 1 days",
                  "/css/"    => "access 3 days",
                  "/figs/" => "access 7 days"
               )

You can also add conditional tags as follows:

$HTTP["url"] =~ "^/assets/figs/" {
     expire.url = ( "" => "access 12 hours" )
}

Save and close the file. Restart the lighttpd server using the following command:
# /etc/init.d/lighttpd restart

Step #3: Test your settings

Use the curl command as follows to test http headers:
$ curl -I your-url-here
$ curl -I http:https://www.cyberciti.biz/media/images/misc/warning-40px.png

🐧 If you liked this page, please support my work on Patreon or with a donation.
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source & DevOps topics via:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
2 comments… add one
  • Jerimaih Dec 23, 2013 @ 18:19
    curl -I http://example.com/test.html

    Check for the Cache-Control and Expires.

  • Guy Patterson Jan 6, 2010 @ 23:22

    What are some methods to test whether or not mod_expire is working correctly?

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.