CURL geeft op Server A een foutmelding, terwijl op server B de juiste response komt
https://stackoverflow.com/questions/49389787/php-curl-gives-host-error-on-different-server-with-the-same-curl-settings
Het probleem
We hebben 2 servers, waarbij Server A draait op PHP 5.6.34 en Server B op 5.6.33-0+deb8u1.
Ik heb een snippet gemaakt om te kijken of een link een geldige (200/300) response geeft en niet dood is (400+). Het probleem is dat deze op Server A tot zover altijd werkt, maar op Server B deze enkele keren niet goed werkt. In de meeste gevallen zijn beide resultaten gelijk, maar bij 1/2 op de 1000 links geeft Server B een error.
Dat is het geval met de link "http://www.galerie-bonnard.com". Op Server A geeft deze een geldige response, op Server B een foutmelding.
Server A:
Server B:
Dus ik heb een derde server aangemaakt (weer een andere host), en die geeft hetzelfde resultaat als Server B. Er moet dus iets in de instellingen zitten van server B, waardoor deze een foutmelding geeft, terwijl Server A een geldige response geeft. (Zover ik weet, mocht de website een firewall gebruiken en Server B expliciet geblokkeerd zijn, dan zou deze een 500 status terug moeten geven, of een timeout).
De PHP snippet:
Hebben jullie nog ideeën waar dit aan kan liggen? Ik loop redelijk vast op dit probleem.
Omdat ik vermoed dat dit een servergerelateerd probleem is, heb ik deze onder Techtalk aangemaakt.
Alvast bedankt voor jullie inspanningen/reacties!
Groet,
Frank
Ik heb deze vraag eerder gesteld op SO, maar helaas daar geen opzet gevonden om mee verder te kunnen om het probleem op te lossen: Het probleem
We hebben 2 servers, waarbij Server A draait op PHP 5.6.34 en Server B op 5.6.33-0+deb8u1.
Ik heb een snippet gemaakt om te kijken of een link een geldige (200/300) response geeft en niet dood is (400+). Het probleem is dat deze op Server A tot zover altijd werkt, maar op Server B deze enkele keren niet goed werkt. In de meeste gevallen zijn beide resultaten gelijk, maar bij 1/2 op de 1000 links geeft Server B een error.
Dat is het geval met de link "http://www.galerie-bonnard.com". Op Server A geeft deze een geldige response, op Server B een foutmelding.
Server A:
Quote:
string(237) "HTTP/1.1 200 OK Server: nginx Date: Tue, 20 Mar 2018 16:02:44 GMT Content-Type: text/html Content-Length: 3709 Connection: keep-alive Last-Modified: Tue, 20 Feb 2018 02:09:08 GMT ETag: "e7d-5659b4bb6aac6" Accept-Ranges: bytes " array(27) { ["url"]=> string(31) "http://www.galerie-bonnard.com/" ["content_type"]=> string(9) "text/html" ["http_code"]=> int(200) ["header_size"]=> int(237) ["request_size"]=> int(95) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0.12653) ["namelookup_time"]=> float(0.124936) ["connect_time"]=> float(0.125468) ["pretransfer_time"]=> float(0.125586) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(3709) ["upload_content_length"]=> float(0) ["starttransfer_time"]=> float(0.126475) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["primary_ip"]=> string(14) "xxx" ["primary_port"]=> int(80) ["local_ip"]=> string(14) "xxx" ["local_port"]=> int(58428) ["redirect_url"]=> string(0) "" ["request_header"]=> string(95) "HEAD / HTTP/1.1 Host: www.galerie-bonnard.com Accept: */* Accept-Encoding: deflate, gzip " } string(0) ""
Server B:
Quote:
bool(false) array(26) { ["url"]=> string(31) "http://www.galerie-bonnard.com/" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0.004128) ["namelookup_time"]=> float(0) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) ["redirect_url"]=> string(0) "" ["primary_ip"]=> string(0) "" ["certinfo"]=> array(0) { } ["primary_port"]=> int(0) ["local_ip"]=> string(0) "" ["local_port"]=> int(0) } string(47) "Could not resolve host: www.galerie-bonnard.com""
Dus ik heb een derde server aangemaakt (weer een andere host), en die geeft hetzelfde resultaat als Server B. Er moet dus iets in de instellingen zitten van server B, waardoor deze een foutmelding geeft, terwijl Server A een geldige response geeft. (Zover ik weet, mocht de website een firewall gebruiken en Server B expliciet geblokkeerd zijn, dan zou deze een 500 status terug moeten geven, of een timeout).
De PHP snippet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$url = "http://www.galerie-bonnard.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
var_dump(curl_exec($ch));
var_dump(curl_getinfo($ch));
var_dump(curl_error($ch));
?>
$url = "http://www.galerie-bonnard.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
var_dump(curl_exec($ch));
var_dump(curl_getinfo($ch));
var_dump(curl_error($ch));
?>
Hebben jullie nog ideeën waar dit aan kan liggen? Ik loop redelijk vast op dit probleem.
Omdat ik vermoed dat dit een servergerelateerd probleem is, heb ik deze onder Techtalk aangemaakt.
Alvast bedankt voor jullie inspanningen/reacties!
Groet,
Frank
Gewijzigd op 27/03/2018 16:41:27 door Frank M
Quote:
Dus ik heb een derde server aangemaakt (weer een andere host), en die geeft hetzelfde resultaat als Server B. Er moet dus iets in de instellingen zitten van server B, waardoor deze een foutmelding geeft, terwijl Server A een geldige response geeft.
Bedoel je niet "en die geeft hetzelfde resultaat als Server A", of werken B en de derde server beide niet?
Is dit niet simpelweg een DNS-issue? Er staat "Could not resolve host". Dit heeft weinig met cURL te maken, die kan zijn werk niet doen als de host onbekend is. Zijn andere sites wel bereikbaar?
Server B en de derde server werken beide niet. Alle 3 de servers staan bij verschillende hosters. Vrijwel elke andere site is op Server B (en voor het gemak noem ik de ander even Server C) bereikbaar, op enkele websites zoals deze na. Dat is ook het vreemde en lastige hiervan. Als alle websites die foutmelding gaven, dan was het een stuk eenvoudiger te verhelpen.
Server A is unmanaged en zelf geconfigureerd
Server B is managed, maar wel met volledige root toegang
Server C is managed, zonder toegang tot de root (enkel Plesk Reseller mogelijkheden)
Op alle 3 de servers gebruik ik Plesk als control panel.
Als ik bijv. https://phphulp.nl als URL gebruik, dan krijg ik een geldige response op alle 3 de servers:
Quote:
string(871) "HTTP/1.1 200 OK Server: nginx Date: Tue, 27 Mar 2018 15:10:57 GMT Content-Type: text/html Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/5.5.9-1ubuntu4.24 Pragma: no-cache Cache-Control: no-cache, must-revalidate Expires: Sat, 26 Jul 1997 05:00:00 GMT Set-Cookie: PHPSESSID=8plms5bd5u8on3fiu7mamkkb60; path=/ Set-Cookie: adblocker=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/ Set-Cookie: res_screen=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=www.phphulp.nl Set-Cookie: res_screen=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/ Set-Cookie: custom_screen=5aba5f0155bfe; expires=Thu, 26-Apr-2018 15:10:57 GMT; Max-Age=2592000; path=/; domain=www.phphulp.nl X-Powered-By: PleskLin Strict-Transport-Security: max-age=31536000; includeSubdomains; Content-Encoding: gzip " array(27) { ["url"]=> string(23) "https://www.phphulp.nl/" ["content_type"]=> string(9) "text/html" ["http_code"]=> int(200) ["header_size"]=> int(871) ["request_size"]=> int(86) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0.326313) ["namelookup_time"]=> float(0.004127) ["connect_time"]=> float(0.015988) ["pretransfer_time"]=> float(0.056165) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(0) ["starttransfer_time"]=> float(0.326283) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["primary_ip"]=> string(14) "xxx" ["primary_port"]=> int(443) ["local_ip"]=> string(14) "xxx" ["local_port"]=> int(55194) ["redirect_url"]=> string(0) "" ["request_header"]=> string(86) "HEAD / HTTP/1.1 Host: www.phphulp.nl Accept: */* Accept-Encoding: deflate, gzip " } string(0) ""
Gewijzigd op 27/03/2018 17:12:29 door Frank M
Staan op server B wel root certificaten geinstalleerd? Op Debian varianten is dat het ca-certificates pakket.
Wat mij opvalt, het kost enige tijd om http://www.galerie-bonnard.com te laden (4-5 seconden), misschien kan het ophogen van timeouts helpen? Verder voortboordurend op deze denkwijze zou je dit kunnen proberen.
Gewijzigd op 27/03/2018 17:35:54 door Thomas van den Heuvel
Hm, ik kan die site vanaf hier niet eens laden (DNS_PROBE_FINISHED_NXDOMAIN). Dus misschien zit het probleem wel gewoon aan "de overkant" (of in ieder geval een brakke DNS ergens) ...
De snelle diagnose laat zien domein wordt geserveerd door ns1.slampaq.com en ns2.slampaq.com, maar dat ns2.slampaq.com dat domein helemaal niet kent.
Gewijzigd op 27/03/2018 17:56:53 door Ben van Velzen
@Thomas Yes, dat was ons ook opgevallen, dat de laadtijd hoog lag. De timeout hadden we op 10 seconden staan en naar 20 gezet, maar dat mocht niet baten.
@Rob @Ben Ah, het lag helemaal niet aan de serverinstellingen. Fijn om dat in ieder geval te weten. Server A gaat via het andere NS record, Server B en C via ns2... Gewoon puur toeval dus dat A het wel doet en B en C het niet deden. Problem solved!
We hebben vanavond nog 10.000 domeinen gecheckt op valide uitkomst, en ze kloppen allemaal.
Super bedankt voor jullie hulp, fijn dat ik op jullie hulp kon (en kan) rekenen!