正如在这个问题中看到的那样,谷歌浏览器和任何基于 cromium 的浏览器(Brave Browser、Chromium)都会强制任何子.localhost
域位于 127.0.0.1 中,并且它将引入/etc/hosts
文件中的任何条目。
但是在我的团队中,惯例是使用.localhost
指向vagrant
正在运行的 vm 的子域,127.0.0.1
因此这会使整个工作流程进入异构团队(每个成员的计算机都有不同的操作系统)
我怎样才能绕过这个问题?
绕过此问题的一个好方法是让每个工作站/雇主的本地反向代理监听127.0.0.1
以及您用来与开发中应用程序通信的任何端口。
一个简单的方法是利用nginx
网络服务器。假设.localhost
子域是myapp.localhost
并且 vagrant vm 监听到 ip 192.168.10.80
,正确的 nginx 设置是:
server {
listen 80;
server_name myapp.localhost;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://192.168.10.80;
}
}
在 ubuntu GNU/Linux 发行版中,您应该将/etc/nginx/sites-enabled/default
创建新文件/etc/nginx/sites-available
和符号链接删除到etc/nginx/sites-enabled/
文件夹中。
注意:在符号链接期间使用完整路径而不是相对路径。
另外,正如您所注意到的,我还传递了标头Host
,X-Forwarded-For
并且使用了标头,因为某些应用程序可能会从标头解析 url,而Host
标头是开发中通常使用的(例如 Codeingiter 的古代版本)来自动解析 url。
此外,对于其他框架,也可能由于缺少适当的标头而停止提供内容,从而导致开发 PITA(在 souvlaki 中未使用的另一个;))。