CURL geeft op Server A een foutmelding, terwijl op server B de juiste response komt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frank M

Frank M

27/03/2018 16:40:42
Quote Anchor link
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: 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:
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)
PHP script in nieuw venster Selecteer het PHP script
1
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));
?>


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
 
PHP hulp

PHP hulp

19/04/2024 13:15:42
 
Thomas van den Heuvel

Thomas van den Heuvel

27/03/2018 16:52:53
Quote Anchor link
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?
 
Frank M

Frank M

27/03/2018 17:11:46
Quote Anchor link
Dank voor je reactie Thomas!

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
 
Ben van Velzen

Ben van Velzen

27/03/2018 17:19:04
Quote Anchor link
Staan op server B wel root certificaten geinstalleerd? Op Debian varianten is dat het ca-certificates pakket.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/03/2018 17:32:42
Quote Anchor link
@Ben, dat zou een verschil kunnen zijn, maar de oorspronkelijke site bevat geen https (of heeft dit er niets mee te maken, ik zit niet zo in deze materie :)), dus weet niet of dit relevant is, daarbij geeft TS aan dat er geen problemen zijn met phphulp, die wel https gebruikt.

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
 
Rob Doemaarwat

Rob Doemaarwat

27/03/2018 17:51:12
Quote Anchor link
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) ...
 
Ben van Velzen

Ben van Velzen

27/03/2018 17:56:23
Quote Anchor link
@Thomas en @Rob zo te zien is DNS inderdaad brak.
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
 
Frank M

Frank M

28/03/2018 00:45:24
Quote Anchor link
@Ben Gecheckt, zijn op beide aanwezig, inclusief Fullchain (CA) certificaten.

@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!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.