# The http-redir VM

We use a small VM on GCE to redirect certain HTTP requests to canonical destinations (e.g. \*.bazel.io -> \*.bazel.build).

## Installation

 - Create a new CentOS 7 VM on GCE
 - Update everything: `yum upgrade`
 - Install nginx: `yum install nginx`
 - Configure nginx:

```
cat > /etc/nginx/nginx.conf <<'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
  worker_connections 1024;
}

http {
  include             /etc/nginx/mime.types;
  default_type        application/octet-stream;

  # Redirect variations of the main website URL to the canonical one.
  server {
    listen 80;
    server_name bazel.build www.bazel.build bazel.io www.bazel.io;
    return 301 https://bazel.build$request_uri;
  }

  # Redirect http:// to https:// and *.bazel.io to *.bazel.build.
  server {
    listen 80;
    server_name ~^(?<subdomain>.+)\.bazel\.(?<tld>.+)$;
    return 301 https://$subdomain.bazel.build$request_uri;
  }

  # Catch-all default server that just returns an error.
  server {
    listen 80 default_server;
    server_name _;
    add_header Content-Type text/plain;
    return 200 "Bazel Redirection Service";
  }
}
EOF
```
 - Enable the nginx service: `systemctl enable nginx`
 - Start the nginx service: `systemctl start nginx`
