diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c index ec1014197..56e2b5b72 100644 --- a/src/http/ngx_http.c +++ b/src/http/ngx_http.c @@ -348,6 +348,7 @@ static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy) ls->ctx = ctx; ls->servers = &in_port[p]; +#if 0 if (in_port[p].addr.nelts == 1) { in_addr = (ngx_http_in_addr_t *) in_port[p].addr.elts; @@ -359,10 +360,24 @@ static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy) ls->servers = NULL; } } +#endif ngx_log_debug(cf->log, "ls ctx: %d:%08x" _ in_port[p].port _ ls->ctx); } } + /* DEBUG STUFF */ + in_port = (ngx_http_in_port_t *) in_ports.elts; + for (p = 0; p < in_ports.nelts; p++) { +ngx_log_debug(cf->log, "port: %d" _ in_port[p].port); + in_addr = (ngx_http_in_addr_t *) in_port[p].addr.elts; + for (a = 0; a < in_port[p].addr.nelts; a++) { + char ip[20]; + ngx_inet_ntop(AF_INET, &in_addr[a].addr, ip, 20); +ngx_log_debug(cf->log, "%s %08x" _ ip _ in_addr[a].core_srv_conf); + } + } + /**/ + return NGX_CONF_OK; } diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h index 1490c9887..719781efc 100644 --- a/src/http/ngx_http.h +++ b/src/http/ngx_http.h @@ -138,12 +138,15 @@ struct ngx_http_request_s { ngx_connection_t *connection; - u_int in_addr; + u_int in_addr; - int filter; + int port; + ngx_str_t port_name; - ssize_t client_content_length; - char *discarded_buffer; + int filter; + + ssize_t client_content_length; + char *discarded_buffer; ngx_str_t path; int path_err; diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 35a3b75df..1742b7cbf 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -117,13 +117,13 @@ ngx_log_debug(r->connection->log, "servers: %0x" _ r->connection->servers); /* AF_INET only */ in_port = (ngx_http_in_port_t *) r->connection->servers; + in_addr = (ngx_http_in_addr_t *) in_port->addr.elts; a = 0; if (in_port->addr.nelts > 1) { /* find r->in_addr, getsockname() */ - in_addr = (ngx_http_in_addr_t *) in_port->addr.elts; for ( /* void */ ; a < in_port->addr.nelts; a++) { if (in_addr[a].addr == INADDR_ANY) { @@ -203,7 +203,7 @@ ngx_log_debug(r->connection->log, "loc_conf: %0x" _ r->loc_conf); int ngx_http_core_translate_handler(ngx_http_request_t *r) { - int i, rc, len, f_offset, l_offset; + int i, rc, len, port_len, f_offset, l_offset; char *buf, *location, *last; ngx_err_t err; ngx_table_elt_t *h; @@ -245,14 +245,34 @@ ngx_log_debug(r->connection->log, "doc_root: %08x" _ &loc_conf->doc_root); s_name = (ngx_http_server_name_t *) scf->server_names.elts; + if (r->port == 0) { +#if 0 + struct sockaddr_in *addr_in; + addr_in = (struct sockaddr_in *) r->connection->sockaddr; + r->port = ntohs(addr_in->sin_port); +#else + ngx_http_in_port_t *in_port; + in_port = (ngx_http_in_port_t *) r->connection->servers; + r->port = in_port->port; +#endif + if (r->port != 80) { + ngx_test_null(r->port_name.data, ngx_palloc(r->pool, 7), + NGX_HTTP_INTERNAL_SERVER_ERROR); + r->port_name.len = ngx_snprintf(r->port_name.data, 7, ":%d", + r->port); + } + } + + port_len = (r->port != 80) ? r->port_name.len : 0; + /* "+ 7" is "http://" */ - if (loc_conf->doc_root.len > s_name[0].name.len + 7) { + if (loc_conf->doc_root.len > 7 + s_name[0].name.len + port_len) { len = loc_conf->doc_root.len; f_offset = 0; - l_offset = len - (s_name[0].name.len + 7); + l_offset = len - (7 + s_name[0].name.len + port_len); } else { - len = s_name[0].name.len + 7; + len = 7 + s_name[0].name.len + port_len; f_offset = len - loc_conf->doc_root.len; l_offset = 0; } @@ -367,6 +387,10 @@ ngx_log_debug(r->connection->log, "HTTP DIR: '%s'" _ r->file.name.data); ngx_memcpy(location, "http://", 7); ngx_memcpy(location + 7, s_name[0].name.data, s_name[0].name.len); + if (port_len) { + ngx_memcpy(location + 7 + s_name[0].name.len, r->port_name.data, + port_len); + } *last++ = '/'; *last = '\0';