Setting up a virtual host

A virtual host on Edge defines the domains and Edge Router ports on which an API proxy is exposed, and, by extension, the URL that apps use to access an API proxy. A virtual host also defines whether the API proxy is accessed by using the HTTP protocol, or by the encrypted HTTPS protocol.

As part of the Edge onboarding process, you have to create an organization, environment, and virtual host. Edge provides the setup-org command to make this process easier for new users.

When you create the virtual host, you must specify the following information:

  • The name of the virtual host that you use to reference it in your API proxies.
  • The port on the Router for the virtual host. Typically these ports start at 9001 and increment by one for every new virtual host.
  • The host alias of the virtual host. Typically the DNS name of the virtual host.

For example, in a config file passed to the setup-org command, you can specify this information as:

# Specify virtual host information
VHOST_PORT=9001
VHOST_NAME=default

# If you have a DNS entry for the virtual host
VHOST_ALIAS=myapis.apigee.net

The Edge Router compares the Host header of the incoming request to the list of available host aliases as part of determining the API proxy that handles the request. When making a request through a virtual host, either specify a domain name that matches the host alias of a virtual host, or specify the IP address of the Router and the Host header containing the host alias.

For example, if you created a virtual host with a host alias of myapis.apigee.net on port 9001, then a cURL request to an API through that virtual host could use one of the following forms:

  • If you have a DNS entry for myapis.apigee.net:
    curl http://myapis.apigee.net:9001/proxy-base-path/resource-path
  • If you do not have a DNS entry for myapis.apigee.net:
    curl http://routerIP:9001/proxy-base-path/resource-path -H 'Host: myapis.apigee.net'

    In this form, you specify the IP address of the Router, and pass the host alias in the Host header.

Options when you do not have a DNS entry for the virtual host

One option when you do not have a DNS entry is to set the host alias to the IP address of the Router and port of the virtual host, as routerIP:port. For example:

VHOST_ALIAS=192.168.1.31:9001

Then you make a curl command in the form below:

curl http://routerIP:9001/proxy-base-path/resource-path

This option is preferred because it works well with the Edge UI.

If you have multiple Routers, add a host alias for each Router, specifying the IP address of each Router and port of the virtual host:

# Specify the IP and port of each router as a space-separated list enclosed in quotes:
# VHOST_ALIAS="192.168.1.31:9001 192.168.1.32:9001"

Alternatively, you can set the host alias to a value, such as temp.hostalias.com. Then, you have to pass the Host header on every request:

curl -v http://routerIP:9001/proxy-base-path/resource-path -H 'host: temp.hostalias.com'

Or, add the host alias to your /etc/hosts file. For example, add this line to /etc/hosts:

192.168.1.31   temp.hostalias.com

Then you can make a request as if you had a DNS entry:

curl -v http://myapis.apigee.net:9001/proxy-base-path/resource-path