diff src/http/modules/proxy/ngx_http_proxy_upstream.c @ 46:9f3205d496a0 NGINX_0_1_23

nginx 0.1.23 *) Feature: the ngx_http_ssi_filter_module and the ssi, ssi_silent_errors, and ssi_min_file_chunk directives. The 'echo var="HTTP_..." default=""' and 'echo var="REMOTE_ADDR"' commands are supported. *) Feature: the %request_time log parameter. *) Feature: if the request has no the "Host" header line, then the "proxy_preserve_host" directive set this header line to the first server name of the "server_name" directive. *) Bugfix: nginx could not be built on platforms different from i386, amd64, sparc É ppc; bug appeared in 0.1.22. *) Bugfix: the ngx_http_autoindex_module now shows the information not about the symlink, but about file or directory it points to. *) Bugfix: the %apache_length parameter logged the negative length of the response header if the no response was transferred to a client.
author Igor Sysoev <http://sysoev.ru>
date Tue, 01 Mar 2005 00:00:00 +0300
parents a39d1b793287
children 6cfc63e68377
line wrap: on
line diff
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -145,10 +145,18 @@ static ngx_chain_t *ngx_http_proxy_creat
     }
 
 
-    if (p->lcf->preserve_host && r->headers_in.host) {
-        len += sizeof(host_header) - 1
-            + r->headers_in.host_name_len + sizeof(":") - 1 + uc->port_text.len
-            + sizeof(CRLF) - 1;
+    if (p->lcf->preserve_host) {
+        if (r->headers_in.host) {
+            len += sizeof(host_header) - 1
+                + r->headers_in.host_name_len + sizeof(":") - 1
+                + uc->port_text.len + sizeof(CRLF) - 1;
+
+        } else {
+            len += sizeof(host_header) - 1
+                + r->server_name.len + sizeof(":") - 1
+                + uc->port_text.len + sizeof(CRLF) - 1;
+        }
+
     } else {
         len += sizeof(host_header) - 1 + uc->host_header.len
             + sizeof(CRLF) - 1;
@@ -278,9 +286,14 @@ static ngx_chain_t *ngx_http_proxy_creat
 
     b->last = ngx_cpymem(b->last, host_header, sizeof(host_header) - 1);
 
-    if (p->lcf->preserve_host && r->headers_in.host) {
-        b->last = ngx_cpymem(b->last, r->headers_in.host->value.data,
-                             r->headers_in.host_name_len);
+    if (p->lcf->preserve_host) {
+        if (r->headers_in.host) {
+            b->last = ngx_cpymem(b->last, r->headers_in.host->value.data,
+                                 r->headers_in.host_name_len);
+        } else {
+            b->last = ngx_cpymem(b->last, r->server_name.data,
+                                 r->server_name.len);
+        }
 
         if (!uc->default_port) {
             *b->last++ = ':';