diff -r e24850f69497 src/http/ngx_http.c
--- a/src/http/ngx_http.c	Tue Jan 22 11:49:18 2008 +0100
+++ b/src/http/ngx_http.c	Sun Feb 10 11:14:22 2008 +0100
@@ -363,6 +363,22 @@ ngx_http_block(ngx_conf_t *cf, ngx_comma
         hk->value = header;
     }
 
+    if (cmcf->use_x_forwarded_host) {
+        /* Use the X-Forwarded-Host instead of the Host header */
+        ngx_http_header_t  *header = ngx_palloc(cf->pool, sizeof(ngx_http_header_t)); 
+
+        header->name.data = (u_char *) "X-Forwarded-Host";
+        header->name.len = sizeof("X-Forwarded-Host") - 1;
+        header->offset = offsetof(ngx_http_headers_in_t, host);
+        header->handler = ngx_http_headers_in[0].handler;
+
+        hk = headers_in.elts;
+
+        hk->key = header->name;
+        hk->key_hash = ngx_hash_key_lc(header->name.data, header->name.len);
+        hk->value = header;
+    }
+    
     hash.hash = &cmcf->headers_in_hash;
     hash.key = ngx_hash_key_lc;
     hash.max_size = 512;
diff -r e24850f69497 src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c	Tue Jan 22 11:49:18 2008 +0100
+++ b/src/http/ngx_http_core_module.c	Sun Feb 10 11:14:22 2008 +0100
@@ -92,6 +92,13 @@ static ngx_conf_enum_t  ngx_http_core_re
 
 static ngx_command_t  ngx_http_core_commands[] = {
 
+    { ngx_string("use_x_forwarded_host"),
+      NGX_HTTP_MAIN_CONF|NGX_CONF_FLAG,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_MAIN_CONF_OFFSET,
+      offsetof(ngx_http_core_main_conf_t, use_x_forwarded_host),
+      NULL },
+      
     { ngx_string("variables_hash_max_size"),
       NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
       ngx_conf_set_num_slot,
@@ -2144,6 +2151,8 @@ ngx_http_core_create_main_conf(ngx_conf_
         return NGX_CONF_ERROR;
     }
 
+    cmcf->use_x_forwarded_host = NGX_CONF_UNSET;
+
     cmcf->server_names_hash_max_size = NGX_CONF_UNSET_UINT;
     cmcf->server_names_hash_bucket_size = NGX_CONF_UNSET_UINT;
 
@@ -2159,6 +2168,10 @@ ngx_http_core_init_main_conf(ngx_conf_t 
 {
     ngx_http_core_main_conf_t *cmcf = conf;
 
+    if (cmcf->use_x_forwarded_host == NGX_CONF_UNSET) {
+        cmcf->use_x_forwarded_host = 0;
+    }
+    
     if (cmcf->server_names_hash_max_size == NGX_CONF_UNSET_UINT) {
         cmcf->server_names_hash_max_size = 512;
     }
diff -r e24850f69497 src/http/ngx_http_core_module.h
--- a/src/http/ngx_http_core_module.h	Tue Jan 22 11:49:18 2008 +0100
+++ b/src/http/ngx_http_core_module.h	Sun Feb 10 11:14:22 2008 +0100
@@ -99,6 +99,7 @@ typedef struct {
 
     ngx_array_t                variables;       /* ngx_http_variable_t */
 
+    ngx_flag_t                 use_x_forwarded_host;
     ngx_uint_t                 server_names_hash_max_size;
     ngx_uint_t                 server_names_hash_bucket_size;
 
