uma...@comcast.net wrote:
All the vHosts are to be situated on the same server.
The server may be addressed using any loopback address
or any non-loopback addressed configured on the NICs of the
server.

Hence I have the mapping
   127.0.0.9 -> vhost1
   127.0.0.10 -> vhost 2

Let's say that a request arrives at address 10.1.1.1 (configured
as an external address of this server).

Which vHost would serve this request?

None.

As per the subject and the previous couple of posts, you were talking about Connectors configured to answer IP addresses. If there is no Connector configured for listening on IP address X, and a request arrives to the host for IP address X, Tomcat just won't pick it up and the connection request will be refused. So the question about a "default host" in that case is kind of moot, I think. Which was the reason for my cheeky note.

In addition :
> The server may be addressed using any loopback address
..
only if the request originates from the same host. Otherwise, it would never get there, since the loopback addresses, by definition, are not routable and not usable outside the host itself. (You can never "ping" a host, from outside of that host, on any of its loopback addresses).

Maybe there is a slight misunderstanding here of how these things work.
What may be confusing is that one talks about "name-based virtual hosts" and "IP-based virtual hosts", as if they were just two variations of the same thing. They are not, and the mechanism for each is very different.

A <Connector> has an IP address and a port, but no name.
A <Host> has a name, but no IP address.

A HTTP request is /always/ preceded by a TCP connection to an IP address:port. If nothing is "listening" to that IP address:port, the connection is refused, and the request is never made.

But let's suppose that a <Connector> is configured to accept connections on that IP address:port, and thus the connection is established.
That is step 1.

Step 2:
Once the connection is made (to Tomcat, through one Connector), then (and only then) the client /can/ send a request over this connection, This request, as a minimum (in HTTP 1.1), would have 2 lines like :
GET /something HTTP/1.1
Host: (name, or IP address but considered as a string/name)

That "Host:" header is then what the webserver would use, to scan through its defined "name-based virtual hosts" (<Host> tags in Tomcat), to find the appropriate one to answer this request. This would normally be the Host whose "name" attribute matches the content of the HTTP request's Host: header. If the webserver does not find such a matching Hist, it will usually default to the first-defined Host associated to that Connector, as the default host.
(At least Apache httpd and Tomcat do it this way).

But all this pre-supposes that the TCP connection was made first, which will not happen if there is not a Connector which explicitly "listens" on the IP address:port with which the client tries to make the connection.
Which was the reason for my "None" answer above.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to