场景描述:公司一个后台项目使用vue2进行开发的,后台有个登录页面需要登录,但是这个接口在浏览器上使用vscode启动的服务地址进行访问然后登录的话会存在跨域问题,和后台沟通后台不愿意配置跨域白名单配置,然而本地调试需要登录成功后台页面才能调试对应里面功能模块。
于是:通过修改配置本地hosts方式来解决这个问题
怎么配置修改hosts:例如正常进入后台的地址是 www.quest.119you.com,使用这个地址在浏览器访问然后登录就能正常进入后台进行操作;那么可以将vscode启动的服务ip地址映射到www.quest.119you.com,然后更新到电脑hosts,再去访问www.quest.119you.com不就找到本地hosts映射配置的ip,就可以访问vscode启动的服务,然后能成功的登录进后台进行调试了
关于本机hosts配置注意事项
- hosts里面只能配置ip地址,ip地址不能够带端口号
- vscode 在没有端口占用情况下,启动的服务地址不带端口号,例如:http://192.168.0.125/
- vscode 在端口被占用情况下,启动点服务地址会带上对应服务的端口号,例如:http://192.168.0.125:8080/
不管启动服务地址有没有带端口号,配置的host只能是ip映射对应域名,参考:
192.168.0.125 www.quest.119you.com
配置更新hosts设置完成后,如果本地服务不带端口,则输入www.quest.119you.com即可访问;如果带端口,则在对应域名后面带上对应端口即可访问(www.quest.119you.com:8080)
本地电脑完成hosts更新配置后,然后根据对应的地址访问后台,这里可能遇到的坑:
- 1.如果本电脑启动了代理服务,会发现访问还是访问到了公网上对应服务器
//可通过ping 查看域名对应的ip 会发现是服务器对应的ip
ping www.quest.119you.com
- 2.本机关闭代理(注意:要关掉电脑设置的或者开启的代理软件)后,更新设置hosts依然不生效(如:hosts配置的是vscode启动服务的ip映射到那个域名,访问那个域名居然还是访问到了线上服务器的ip。对应原因是本地dns没有刷新啥的。
总结以下是一些可能的解决方法:
(1) 检查调试访问本地那个域名前面是不是https,如果是https要改成http才能访问到vscode启动的服务
(2) 清除 DNS 缓存:打开终端应用程序,输入以下命令并按回车键:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
(3) 检查 hosts 文件路径:确保您正在编辑正确的 hosts 文件。hosts 文件位于 /etc/hosts。您可以使用以下命令打开 hosts 文件:
sudo nano /etc/hosts
(4) 确保正确编辑 hosts 文件:检查您在 hosts 文件中是否正确地添加了要屏蔽或重定向的域名和 IP 地址。确保每个条目都在单独的一行上,并在 IP 地址和域名之间使用空格或制表符。
(5) 检查文件权限:确认您对 hosts 文件具有适当的权限。使用以下命令检查文件权限:
ls -l /etc/hosts
如果您没有写入权限,请使用以下命令将其更改为可写入:
sudo chmod +w /etc/hosts
(6) 重启网络服务:有时,重启网络服务可以使 hosts 文件的更改生效。使用以下命令重启网络服务:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo killall -9 mDNSResponderHelper
sudo dscacheutil -configuration
(7) 使用上述命令执行后,重新访问一般都能够解决
关于DNS扯淡:
DNS是什么:原理是通过域名找到对应ip,根据实际环境找到的ip不同
正常情况下我们在浏览器上输入一个网址就能打开网站,这是怎么做到的呢?
- 用户输入网之后,对应请求会将对应网址带到对应所在地的网络运行商,运营商拿到域名后就近匹配最近的DNS解析服务器,DNS解析服务器拿到域名后去匹配对应的ip(DNS服务器肯定是定时刷新对应域名和公网ip的哈),然后在根据对应的ip访问到对应的服务器,从而访问服务器对应的内容
- 这种情况下ip是服务器对应ip,是公网上的一个ip
如果本地本质了ip映射到域名更新设置到hosts
- 那么访问对应的域名优先使用本机hosts配置的ip地址,如果找本地hosts映射没有找到对应域名映射,则去附近的DNS服务器查找
不同时间不同地点,访问一个网址,运营商会根据他们规则路由到最近的可用的DNS解析服务器
通过地点,不同时间,可能路由到的DNS解析服务器不是同一个机器