8

I have several web applications running on my developer machine. They mimic our production web applications which are hosted on sub-domain. For example, consider:

api.myserver.com - is mimicked by 127.0.0.1:8000     
www.myserver.com - is mimicked by 127.0.0.1:8008    
and so on...

How can I make it so that, on my Windows 7 machine, HTTP calls to "api.myserver.com" (note the lack of port number) are redirected to 127.0.0.1:8000 etc? Note that this needs to apply both to client-side calls (in the browser) and server-side calls (from IIS to Python development server and vice versa).

Do I need a proxy to run locally to achieve this? Can you recommend such a tool?

2
  • 3
    Just to be clear, what server is your dev machine running? IIS? Jun 24, 2011 at 8:06
  • 1
    I'm running IIS alongside Python development server. There are several server processes of different kinds.
    – urig
    Jun 24, 2011 at 16:31

3 Answers 3

11

Actually the solution to your problem is much simpler than port translation.

Since the entire 127.x.x.x IP block is routed to the local host you can use any IP you want in this block and bind it to each web site.

For examlpe, edit your hosts file to bind:

127.0.0.1    www.site.com
127.0.0.2    api.site.com
127.0.0.3    dev.site.com

Configure each site to bind to its IP address.

Note that since you want to use other servers beside IIS, and IIS tends to hoard all the available IPs for port 80 you need to disable socket pooling for this to work perfectly:

http://www.iislogs.com/steveschofield/iis7-post-44-iis7-and-apache-on-the-same-machine

0
2

Apache with mod_proxy does what you want. Example:

<VirtualHost 127.0.0.1:80>
    ServerName api.myserver.com
    ProxyRequests On
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

Define a VirtualHost definition like this for every subdomain you need.

2
  • Will this technique work even if my web applications are not hosted on Apache? Some run under IIS while others run in "Python development server" - can Apache redirect the requests to these web servers?
    – urig
    Jun 24, 2011 at 15:05
  • Apache only act's an http proxy here, is forwarding http requests. so as long your server is an http server, it should work.
    – sborsky
    Jun 25, 2011 at 9:16
2

You should configure your web sites to answer to different host headers instead of different ports, and then use your hosts file to map all of these names to 127.0.0.1; this way, you will be able to simply type "www.myserver.com" or "api.myserver.com" in your web browser, and the correct site will be used.

3
  • My web applications run in separate processes, doesn't that mean only one of them can listen on port 80 while the others can't?
    – urig
    Jun 24, 2011 at 15:04
  • No, web servers can serve you different sites depending on the host name the browser asks for. This is part of the HTTP protocol and is called "host headers". But of course, they have to use the same web server, if you want f.e. to run Apache and IIS at the same time, they can't use the same port.
    – Massimo
    Jun 24, 2011 at 17:42
  • That's my situation. I'm running several different processes (IIS, Apache, Python dev server) so your solution doesn't apply for me :|
    – urig
    Jun 26, 2011 at 8:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .