mirror of
https://github.com/danbee/danbarber.me.hugo.git
synced 2025-03-04 08:59:18 +00:00
Compare commits
No commits in common. "1a5beedd027426116baf8e690efc97cf9582a38e" and "6de5b2b4d5f82817d0dbed0f06ff0f77b90b268d" have entirely different histories.
1a5beedd02
...
6de5b2b4d5
@ -1,88 +0,0 @@
|
|||||||
---
|
|
||||||
layout: post
|
|
||||||
date: '2020-01-03T21:45:00+00:00'
|
|
||||||
title: Setting up a local resolver on macOS
|
|
||||||
categories:
|
|
||||||
- internet
|
|
||||||
- web
|
|
||||||
- dns
|
|
||||||
- web development
|
|
||||||
---
|
|
||||||
|
|
||||||
For a good number of years I was using Basecamp's Pow for local web development
|
|
||||||
and one of my favourite features was the in built local DNS resolver that meant
|
|
||||||
that `*.dev` would resolve to `127.0.0.1`. This mean that I had a unique
|
|
||||||
hostname for every site I was building and running locally which I have found
|
|
||||||
incredibly useful.
|
|
||||||
|
|
||||||
Unfortunately Pow no longer sees active development (the GitHub repo has been
|
|
||||||
archived) so I wanted to see if I could set up the same kind of local resolver
|
|
||||||
on my Mac without using it.
|
|
||||||
|
|
||||||
It turned out to be pretty straightforward!
|
|
||||||
|
|
||||||
<!--more-->
|
|
||||||
|
|
||||||
Note: We're using `.localhost` instead of `.dev` because Google own the `.dev`
|
|
||||||
TLD and in 2017 they added an HSTS rule to Chromium that forces any `.dev`
|
|
||||||
domain to use HTTPS. As you can imagine, this is not ideal for local development
|
|
||||||
so web developers everywhere had to adjust their setups.
|
|
||||||
|
|
||||||
First of all we need to install Dnsmasq. This will handle the local name
|
|
||||||
resolution. If you're using Homebrew this is dead simple:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ brew install dnsmasq
|
|
||||||
```
|
|
||||||
|
|
||||||
Then we need to configure it to resolve any domain name that ends in
|
|
||||||
`.localhost` to resolve to `127.0.0.1`.
|
|
||||||
|
|
||||||
Uncomment the following line:
|
|
||||||
```bash
|
|
||||||
# /usr/local/etc/dnsmasq.conf
|
|
||||||
conf-dir=/usr/local/etc/dnsmasq.d
|
|
||||||
```
|
|
||||||
|
|
||||||
Add the following file to the Dnsmasq configuration directory:
|
|
||||||
```bash
|
|
||||||
# /usr/local/etc/dnsmasq.d/localhost
|
|
||||||
address=/.localhost/127.0.0.1
|
|
||||||
```
|
|
||||||
|
|
||||||
Start `dnsmasq` as root (It needs to be running as root to be able to bind to
|
|
||||||
port 53):
|
|
||||||
```bash
|
|
||||||
$ sudo brew services start dnsmasq
|
|
||||||
```
|
|
||||||
|
|
||||||
Next we need to tell macOS about the local resolver.
|
|
||||||
|
|
||||||
Add the following file (You will need to do this as `root`):
|
|
||||||
```bash
|
|
||||||
# /etc/resolver/localhost
|
|
||||||
nameserver 127.0.0.1
|
|
||||||
domain localhost
|
|
||||||
search_order 1
|
|
||||||
```
|
|
||||||
|
|
||||||
And voila! Any domain ending in `.localhost` should now resolve to `127.0.0.1`.
|
|
||||||
We can test this with a ping:
|
|
||||||
```bash
|
|
||||||
$ ping foobar.localhost
|
|
||||||
PING foobar.localhost (127.0.0.1): 56 data bytes
|
|
||||||
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.122 ms
|
|
||||||
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.262 ms
|
|
||||||
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.281 ms
|
|
||||||
```
|
|
||||||
|
|
||||||
## So why is this useful?
|
|
||||||
|
|
||||||
That's a very good question! Here's some of the reasons I've found:
|
|
||||||
|
|
||||||
1. If you're developing an app that relies on a number of small services it can
|
|
||||||
be useful to differentiate them by domain.
|
|
||||||
2. It makes OAuth callback URL's more readable.
|
|
||||||
3. It's useful for external services that require a domain name to authenticate.
|
|
||||||
A good example of this is font services such as Typekit or Hoefler & Co.
|
|
||||||
4. It just looks pretty up there in the URL bar!
|
|
||||||
Loading…
Reference in New Issue
Block a user