Web servers

Customize the web server #

Buildpacks allow you to customize the web server for your application. Nginx and Apache2 are supported.

Environment variables #

In case you want to adjust the default document root for your application (in your repository), you can set the path using the runway CLI:

runway config set BP_WEBSERVER_ROOT=app/public

… or set it in project.toml:

[ build ]
  [[ build.env ]]
    name="BP_WEBSERVER_ROOT"
    value="app/public"

Other variables are available in their designated buildpacks:

Server configuration file #

By including a configuration file in the root of your application repository, you can go all the way.

For nginx it’s an nginx.conf and for Apache2 it’s a httpd.conf. Make sure either configuration file configures the entire server (not a single virtual host).

For example, to configure nginx to use the user’s actual IP address, the following snippet will give you an idea for what is expected:

worker_processes 1;
daemon off;

error_log stderr;

events {
  worker_connections 1024;
}

http {
  charset utf-8;
  access_log /dev/stdout;
  default_type application/octet-stream;
  include mime.types;
  sendfile on;

  tcp_nopush on;
  keepalive_timeout 30;
  # Ensure that redirects don't include the internal container PORT - 8080
  port_in_redirect off;

  set_real_ip_from 10.244.0.0/16;
  real_ip_header X-Forwarded-For;

  server {
    listen {{port}};
    # snip
  }
}
Don’t forget to add the listen {{port}}; directive and avoid hard-coding this setting.