curl/file_get_contents/get_headers 中出现错误 404:“无法打开流”

curl/file_get_contents/get_headers 中出现错误 404:“无法打开流”

隔离问题后,我使用以下代码测试我的 API:

    $url = 'http://example.com/api/myendpoint;
    print_r(get_headers($url));die();

有时它确实有效,但有时会返回 404。我访问的链接只是返回 JSON 响应。

在我重新启动 Amazon EC2 服务器后,这种情况开始发生。

如果我在本地执行,它似乎工作得更好(但即使在那里有时它也不起作用)。

     Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Server: nginx/1.10.1
    [2] => Content-Type: application/json
    [3] => Connection: close
    [4] => Cache-Control: private, must-revalidate
    [5] => Date: Wed, 02 Nov 2016 14:47:36 GMT
    [6] => pragma: no-cache
    [7] => expires: -1
    [8] => X-Debug-Token: fadeb4
    [9] => Strict-Transport-Security: max-age=31536000; includeSubdomains;
)

我尝试在一些在线 php 测试器中这样做。同样的问题。

我认为这是一个服务器配置问题,但我不知道如何调试它。

感谢您的帮助。

更新

当我看到我的请求/响应的 HTML 实体时,我得到了这些数据

Array
(
    [url] => http://example.com/api/myendpoint
    [content_type] => text/html
    [http_code] => 404
    [header_size] => 163
    [request_size] => 206
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.00557
    [namelookup_time] => 0.004207
    [connect_time] => 0.004851
    [pretransfer_time] => 0.004874
    [size_upload] => 0
    [size_download] => 579
    [speed_download] => 103949
    [speed_upload] => 0
    [download_content_length] => 579
    [upload_content_length] => 0
    [starttransfer_time] => 0.005555
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => ::ffff:XX:XX:XX:XX
    [certinfo] => Array
        (
        )

    [primary_port] => 80
    [local_ip] => ::ffff:YY.YY.Y.YY
    [local_port] => 42744
)

问题是主 IP XX:XX:XX:XX:XX 不是我的实际 IP。这是我在更改 amazon web-server 中的实例之前的旧 IP。这可能是导致问题的原因,但我该如何修复它?

答案1

我发现了那是什么:

当我更改我的亚马逊网络服务器时,我在 OVH 托管中更改了我的 dns 的 ipv4。但我没有更改 ipv6。

因此,有时当我尝试访问该网站时,呼叫会被重定向到正确的 IP(IPv4 中显示的路径),有时则会重定向到旧的错误 IP(IPv6 指示的路径)

相关内容