Tuesday, January 25, 2011

multiple port-based apache vhosts on osx 10.6 not resolving properly

Hi All,

I have a few local versions of development websites on my local mac, and want to provide access to them from a browser through vhosts, as well as using the live (web) versions from time to time.

I have read many examples of people doing similar things by changing the URL, and having apache listen to the unique URL to serve from a local location. I have always done it using the same URL, but a different port, and while it works seamlessly on windows, I can't get it working on the mac.

(Let's say) I have two websites:

  1. amazingwebsite.com
  2. facebookiller.org

I want to access the local versions by using the same URL, by enabling the browser's proxy (with one click) which I have set to 8080. apache is set to Listen *:8080 in httpd.conf.

In httpd-vhosts.conf (which is getting loaded) I have:

NameVirtualHost *:8080

<VirtualHost *:8080>
    ServerAdmin webmaster@amazingwebsite.com
    ServerName amazingwebsite.com
    ServerAlias www.amazingwebsite.com
    DocumentRoot "/Users/username/Development/Projects/amazingwebsite"

    <Directory "/Users/username/Development/Projects/amazingwebsite/">
        Options Includes Indexes Multiviews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

The 'facebookkiller.org' vhost is basically the same - just different local location.

My /private/etc/hosts is now set to:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

127.0.0.1   amazingwebsite.com
127.0.0.1   facebookkiller.org

and after an apache restart (web sharing off/on), apachectl -S reports:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:8080                 is a NameVirtualHost
         default server amazingwebsite.com (/private/etc/apache2/other/httpd-vhosts.conf:4)
         port 8080 namevhost amazingwebsite.com (/private/etc/apache2/other/httpd-vhosts.conf:4)
         port 8080 namevhost facebookkiller.org (/private/etc/apache2/other/httpd-vhosts.conf:19)
Syntax OK

which looks ok to me.

The behaviour?:

  • amazingwebsite.com:8080 => local installation (correct)
  • www.amazingwebsite.com:8080 => times out (incorrect)
  • amazingwebsite.com => quickly can't connect, browser can't find - (incorrect)
  • www.amazingwebsite.com => goes to web version (correct)
  • facebookkiller.org:8080 => local installation (correct)
  • www.facebookkiller.org:8080 => times out (incorrect)
  • facebookkiller.com => browser can't find (incorrect)
  • www.facebookkiller.com => goes to web version (correct)

So my ServerAlias isn't working, or there is something wrong with my hosts file - or both!

I've spent ages on this, and could really do with some help - thanks..

  • The vhosts are working, you haven't written your local /etc/hosts correctly. What's happening is that your timeout-then-working is because a 'www.' lookup is most likely resulting in a real DNS CNAME pointer back to non-www. version.

    127.0.0.1   localhost google.com www.google.com amazon.com www.amazon.com
    

    That's how you use a hosts file - one IP listed one time, all aliases on the same line and you must list all subdomains needed, www. e.g. that will send traffic to your local Apache instance.

    CapsicumDreams : I tried this, and got no difference. Lots of tutorials on the web suggest the other way.. After looking at so many blogs on the subject, I can't even think how I got it working on the PC (turned off in another country right now).
    troyengel : did you actually try it with the www. entries? regardless of other factors on implementation that's a key point in the setup and should be done.
    From troyengel

0 comments:

Post a Comment