I couldn’t find any information as my search terms were incorrect. My google-fu was off when I was searching.
My objective was to make http://*.localhost.com go to /var/www/*/www, where * is a wildcard.
I’m hoping that this will help others; specifically developed that work on multiple projects.
First, I wanted to wildcard my in my hosts file. I knew I couldn’t do this:
127.0.0.1 *.localhost.com
as that’s now how hosts files work.
DNSMASQ to the rescue, to wildcard the hosts file.
Apache mass vhost, is a technique to setup lots of vhosts based on a pattern.
Some applications such as magento likes to have a proper full domain name. Also makes testing more realistic as well.
Since I’m on OSX, install it via ports.
The instructions are a mash of: http://inspirix.wikispaces.com/dnsmasq-on-OSX and other sites… you may have to restart dnsmasq after you’ve made the changes.
http://www.justincarmony.com/blog/2011/07/27/mac-os-x-lion-etc-hosts-bugs-and-dns-resolution/
sudo port install dnsmasq sudo cp /opt/local/etc/dnsmasq.conf /etc/dnsmasq.conf sudo mkdir -p /System/Library/StartupItems/DNSMASQ 3.) sudo mkdir -p /System/Library/StartupItems/DNSMASQ 4.) sudo nano /System/Library/StartupItems/DNSMASQ/DNSMASQ #!/bin/sh . /etc/rc.common if [ "${DNSMASQ}" = "-YES-" ]; then ConsoleMessage "Starting DNSMASQ" /opt/local/sbin/dnsmasq fi 5.) sudo nano /System/Library/StartupItems/DNSMASQ/Startup Parameters.plist { Description = "Local DNSMASQ Server"; Provides = ("DNS Masq"); OrderPreference = "None"; Messages = { start = "Starting DNSMASQ"; stop = "Stopping DNSMASQ"; }; } 6.) Add line to /etc/hostconfig DNSMASQ=-YES- 7.) sudo chmod +x /System/Library/StartupItems/DNSMASQ/DNSMASQ 8.) sudo /System/Library/StartupItems/DNSMASQ/DNSMASQ 9.) In network settings make sure 127.0.0.1 is in your dns server list. If you do: dig google.com You should see something like this near the bottom (if not, your network settings need to be applied.. try this to flush dns cache: dscacheutil -flushcache ): ;; SERVER: 127.0.0.1#53(127.0.0.1) # test it. ping somewhere.localhost.com : PING somewhere.dev (127.0.0.1): 56 data bytes : 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.031 ms
add the line to /etc/dnsmasq.conf
$> sudo nano -w /etc/dnsmasq.conf ## or your favourite editor, as root.
address=/localhost.com/127.0.0.1
Clear your dns cache.
dscacheutil -flushcache
Troubleshooting:
You may need to setup your network connection to point your DNS to localhost first.
sudo kill -HUP `cat /opt/local/var/run/dnsmasq.pid`
my vhosts Magic
Alias /phpmyadmin /opt/local/www/phpmyadmin <directory "/www"> Options -Indexes FollowSymLinks AllowOverride AuthConfig FileInfo Order allow,deny Allow from all <directory "/opt/local/www/phpmyadmin"> Options -Indexes FollowSymLinks AllowOverride AuthConfig FileInfo Order allow,deny Allow from all UseCanonicalName Off LogFormat "%V %h %l %u %t "%r" %s %b" vcommon CustomLog logs/access_log vcommon # include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%1/www
Leave a Reply