Emulating the web production environment with an Apache HTTP server running on a Windows 7 development machine

To minimize overhead costs of my website, I would restrain myself from buying a hosted plan until my website is launch-able. In the process of developing my website, I will want my tests to be as close to the real thing as possible.

This meant that when I type the domain of my website in my browser location bar, my browser will connect to my development web server, instead of the web server which my domain is being parked at.

I was using Windows 7 and an instance of Apache HTTP server as my development environment when I managed to achieve that. That instance of Apache HTTP server was listening at port 80.

There are two main steps to achieving such an objective:

  • Routing HTTP requests, made to the actual domain, to my local machine
  • Configuring Apache HTTP server to service HTTP request directed to the domain name

Routing HTTP requests, made to the actual domain, to my local machine

By default, my Windows 7 machine uses the services of a domain name server to map domain names into actual ip addresses in order to connect to another machines such as web servers. To emulate a hosted environment with my own Windows 7 machine, I tell it to map the domain name which I had bought into the loopback address.

To do so, I looked for the hosts file at the C:/Windows/System32/drivers/etc/ folder and added the following lines of configurations in the file:

127.0.0.1 techcoil.com
127.0.0.1 www.techcoil.com

When I do that, I had instructed my Windows 7 machine to return the loop back address (127.0.0.1) when my browser tries to access techcoil.com or www.techcoil.com. This result in my browser accessing my local Apache HTTP server with the domain name that I had bought.

Configuring Apache HTTP server to service HTTP request directed to the domain name

Directing my browser to connect to my local Apache HTTP server fulfills one part of the equation. The other part will be to configure my local Apache HTTP server to service HTTP requests directed to my domain name. To do so, I added the following lines of configurations in my <apache_http_server_installation_dir>/conf/httpd.conf file:

<VirtualHost *:80>
    
    ServerName techcoil.com
    ServerAlias www.techcoil.com

    DirectoryIndex index.php
    DocumentRoot "T:/techcoil.com"
    
    <Directory "T:/techcoil.com">
        Order allow,deny
        allow from 127.0.0.1
    </Directory>
    
</VirtualHost>

The first two lines after the VirtualHost directive tell Apache HTTP server that the configurations enclosed within are for HTTP requests which are directed at either techcoil.com or www.techcoil.com.

The DirectoryIndex directive tells Apache HTTP server to send a HTTP response from index.php in the event when the browser tries to access a folder.

DocumentRoot maps HTTP requests to the domain to the T:/techcoil.com folder in my local filesystem.

The Directory directive then instructs Apache HTTP server to limit accesses to files within T:/techcoil.com to only those made from my development machine. Without configurations provided in the Directory directive, my Apache HTTP server will return 403 Forbidden for requests hitting techcoil.com or www.techcoil.com.

Posts that may interest you

About Clivant

Clivant a.k.a Chai Heng enjoys composing software and building systems to serve people. He owns techcoil.com and hopes that whatever he had written and built so far had benefited people. All views expressed belongs to him and are not representative of the company that he works/worked for.

1 comment

  • peter
    April 4, 2013 at 2:16 am

    very intresting reading thanx for posting.
    I wonder if this would work on my set up.