Let’s look at a server from the outside. We have a box in which there is a computer, software, and a connection to the outside world — Ethernet or a serial line to a modem, for example. This connection is known as an interface and is known to the world by its IP address. If the box had two interfaces, they would each have an IP address, and these addresses would normally be different. A single interface, on the other hand, may have more than one IP address (see Chapter 3).
Requests arrive on an interface for a number of different services offered by the server using different protocols:
Network News Transfer Protocol (NNTP): news
Simple Mail Transfer Protocol (SMTP): mail
Domain Name Service (DNS)
HTTP: World Wide Web
The server can decide how to handle these different requests because the four-byte IP address that leads the request to its interface is followed by a two-byte port number. Different services attach to different ports:
NNTP: port number 119
SMTP: port number 25
DNS: port number 53
HTTP: port number 80
As the local administrator or webmaster, you can decide to attach any service to any port. Of course, if you decide to step outside convention, you need to make sure that your clients share your thinking. Our concern here is just with HTTP and Apache. Apache, by default, listens to port number 80 because it deals in HTTP business.
Port numbers below 1024 can only be used by the superuser (root, under Unix); this prevents other users from running programs masquerading as standard services, but brings its own problems, as we shall see.
Under Win32 there is currently no security directly related to port numbers and no superuser (at least, not as far as port numbers are concerned).
This basic setup is fine if our machine is providing only one web
server to the world. In real life, you may want to host several,
many, dozens, or even hundreds of servers, which appear to the world
as completely different from each other. This situation was not
anticipated by the authors of HTTP 1.0, so handling a number of hosts
on one machine has to be done by a kludge, assigning multiple
addresses to the same interface and distinguishing the virtual host
by its IP address. This technique is known as IP-intensive
virtual hosting. Using HTTP 1.1, virtual hosts may be
created by assigning multiple names to the same IP address. The
browser sends a Host
header to say which name it
is using.