Every two weeks I send out a newsletter containing lots of interesting stuff for the modern PHP developer. You can expect quick tips, links to interesting tutorials, opinions and packages. Want to learn the cool stuff? Then sign up now!

Enable http2 on a Forge provisioned server

Added on 2016-04-28: newly provisioned Forge servers will now use http2 by default whenever you install an ssl certifcate.

Like mentioned in the post on how to upgrade PHP, I’m a big fan of Forge. By default sites provisioned by Forge use regular http. Let’s learn how to enable http2.

The http2 protocol provides a lot of benefits over http. In short it’ll make your website load much faster. If want to know how this protocol works under the hood watch this excellent video by Mattias Geniar or read this blogpost at Cloudflare. Here an interesting test by (again) Mattias that shows the potential speed improvements.

A prerequisite for using http2 is that you serve your website via an encrypted connection (note: this is not 100% true but virtually all major browsers won’t support http2 via unencrypted connections). Thanks to LetsEncrypt you can get free ssl certificates. Watch this free video on Laracasts to learn how to install a LetsEncrypt certificate.

Support for http2 was introduced in Nginx 1.9.5. You can check the version number of your Nginx installation by running nginx -v. If you’re on 1.9.5 or higher you’re good. You just have to add http2 to a server block in the Nginx configuration:

server {
  listen 443 ssl http2;

The Chrome developer tools can be used to check if you’re site is indeed using http2. The column “protocol” should display “h2”.


Don’t be overwhelmed with sadness if you’re running something below Nginx 1.9.5. Upgrading is easy! Only three instructions are needed to upgrade to, at the time of this writing, Nginx 1.9.14:

sudo add-apt-repository ppa:nginx/development
sudo apt-get update
sudo apt-get install nginx
Freek Van der Herten is a partner and developer at Spatie, an Antwerp based company that specializes in creating web apps with Laravel. After hours he writes about modern PHP and Laravel on this blog. When not coding he’s probably rehearsing with his kraut rock band.
  • Nicolaswidart

    I had to do more than adding the http2 on the server listen property, explained here in case someone has the same: https://serversforhackers.com/video/http-20-with-nginx#comment-2404655147

  • Anyone following this be warned that Nginx 1.9.5 is the *mainline* version, which means “in development” and therefore could contain bugs. While it is traditionally safe with nginx, keep this in mind if stability problems occur.