【问题标题】:Curl request from one VM instance to another VM (Vagrant) doesn't appear to work从一个 VM 实例到另一个 VM(Vagrant)的 curl 请求似乎不起作用
【发布时间】:2016-09-19 10:51:40
【问题描述】:

我有两个运行 Scotchbox (Vagrant) 实例的虚拟机,本质上是“前端”应用程序 (AngularJS) 和“后端”应用程序(Zend/PHP 等)

我将它们设置在两个单独的 Vagrant 实例上,并从下面的 IP 运行(将它们添加到我的 Windows 主机文件中),因此我可以通过域名(而不仅仅是 IP 地址)访问它们

192.168.33.10 myappfront.local
192.168.33.11 myappback.local

在我的前端应用程序中,我使用 CURL 运行以下 PHP 代码,以在用户登录时验证令牌。

$ch = curl_init();
$parameters = $apiUrl . '/user/login/verify-new-ui?id='.$_REQUEST['id'].'&token='.$_REQUEST['token'].'&appid=3';

curl_setopt($ch, CURLOPT_URL, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$data = json_decode(curl_exec($ch)); // always NULL??
curl_close($ch);

$parameters 变量将包含与此类似的 URL... https://myappback.local/user/login/verify-new-ui?id=1000001445&token=1shg7x1y7u53c1cppg36&appid=3

当我尝试 var_dump 输出 $data 变量时,它始终为 NULL - 我知道该函数有效(它在我们的实时站点上运行良好)所以让我相信这与 Vagrant 相关?

在 vagrant 实例中是否与防火墙相关?谁能建议解决这个问题的最佳方法?

我的vagrantfile如下:

Vagrant.configure("2") do |config|

config.vm.box = "scotch/box"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.hostname = "scotchbox"
config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", "fmode=666"]
config.vm.box_download_insecure = false 

config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    v.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end

config.vm.provision :shell, :path => "bootstrap.sh"

end

// 另一个后端vagrant box

Vagrant.configure("2") do |config|

config.vm.box = "scotch/box"
config.vm.network "private_network", ip: "192.168.33.11"
config.vm.hostname = "scotchbox"
config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", "fmode=666"]

结束

【问题讨论】:

  • 能否请您展示一下,变量 $apiUrl 中存储了什么?你在哪里添加这个:192.168.33.10 myappfront.local 192.168.33.11 myappback.local 我的意思是在本地主机或流浪机器上?
  • 是否需要编辑两个 vagrant 实例中的 hosts 文件?
  • 当然,如果您仅在 localhost 上添加此记录 - 您可以测试任何请求,请使用浏览器。如果你需要从一个虚拟机向另一个虚拟机发出请求,你应该在发出请求的虚拟机中添加相同的配置。
  • 这样一个简单的错误.. 但这解决了它...也可以添加您的最后一条评论作为答案,我会接受并给您 +1

标签: php curl vagrant virtual-machine vagrantfile


【解决方案1】:

您应该将相同的记录添加到发出请求的 VM 中。如果您仅在 localhost 上添加此记录 - 您可以测试任何请求,请使用浏览器。

【讨论】:

  • 如果它可以帮助其他人......使用以下内容通过使用 vagrant ssh 修改主机文件,然后运行此命令。须藤纳米 /etc/hosts
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多