Another day, another problem. I need to replicate the production deployment,
which consists of multiple services running on different domains. I cannot
do that purely relying on localhost because I must test cookies and local
storage behaviour between redirects. Modifying the /etc/hosts file alone
does not help because the port number is not supported. It seems that hosts
file changes should be accompanied by some locally running reverse proxy to
map domains to ports correctly.
Hosts file
One way of doing it is to start with the hosts file and intercept your service domain name resolution to point to localhost:
127.0.0.1 first.service.com
127.0.0.1 second.service.com
127.0.0.1 third.service.com
Apache server
Then configure your Apache server. Add virtual hosts to the config:
# additional config for local dev
<VirtualHost *:80>
ServerName first.service.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName second.service.com
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>
<VirtualHost *:80>
ServerName third.service.com
ProxyPass / http://localhost:8082/
ProxyPassReverse / http://localhost:8082/
</VirtualHost>
# end aditional config
If you’re on macOS Big Sur
- Hosts file is in
/etc/hosts - Apache config is in
/etc/apache2/httpd.conf - Test your Apache config with
apachectl configtest - Enable/uncomment
proxy_moduleandproxy_http_modulein Apache config - Enable/uncomment
Include /private/etc/apache2/extra/httpd-vhosts.confin Apache config - this is where I’ve added additional virtual hosts - Flush DNS
sudo dscacheutil -flushcacheandsudo killall -HUP mDNSResponder
Clear HSTS cache
If your services are using https scheme then most likely your browser has cached
HTTP Strict Transport Security requirement, meaning that it’ll not use insecure http
scheme locally. If it is not cleared then your browser will not be able to reach the locally
running applications on http scheme and will keep using https which will fail to
load the site due to above config.
On Firefox open all browsing history, select your site, right click and choose “Forget about this site”.