nginx reverse proxy for vibe tutorial

James Miller james at aatch.net
Fri May 4 03:37:45 PDT 2012


I have spent some time setting up nginx as a reverse proxy for 
vibe, and I thought I might share some of my issues here for now, 
just in case it helps someone.

I will assume that you are generally familiar with configuring 
nginx, where the files are, how server directives work etc.

The basic setup is the same as any other reverse proxy:

    server {
       listen 80;
       server_name dev.mysite.com;

       location / {
          proxy_pass http://localhost:8080/;
          proxy_redirect off;

          proxy_http_version 1.1;

          proxy_set_header   Host     $host;
          proxy_set_header   X-Real-IP        $remote_addr;
          proxy_set_header   X-Forwarded-For  
$proxy_add_x_forwarded_for;
          proxy_set_header   Content-Length   $body_bytes_sent;
       }
    }

The important things to note are that you need nginx version 
1.1.4 at least. Vibe doesn't seem to work correctly with HTTP 1.0 
requests in this configuration. Also, the line `proxy_set_header  
  Content-Length   $body_bytes_sent;` is necessary because vibe 
will wait for a body, for some reason when being proxied, this 
results in both nginx and vibe waiting for each other, with nginx 
eventually timing out. The Content-Length line sets the correct 
Content-Length for the request, allowing vibe to skip reading the 
body if it needs to.

I also have this section in my server config:


    location ~* 
^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|woff|eof|ttf)$ 
{
       root /path/to/statics;
    }

which means that nginx serves the static files directly, skipping 
vibe. This seems like the best setup to me.

Things that should be improved are:

* More security! While this set up isn't actually insecure, I'm 
sure something could be done to make it better.
* using `try_files`, nginx complains that you can't use 
proxy_pass inside a named location (like `@vibe`), which means 
you can't use try_files to serve arbitrary static files, hence 
the massive list of extensions.

So far I'm loving vibe.d, it is fast and flexible and just works 
(mostly). With nginx serving the static files out the front, the 
speed of the setup is incredible.

I hope that people find this helpful.

--
James Miller


More information about the Digitalmars-d mailing list