web-dev-qa-db-fra.com

Avertissement lors du paramétrage de Force HTTPS (s'exécutant sur IIS et Azure)

Ceci est une copie d’une question que je postée sur les forums de support Joomla :

Lorsque j'essaie de définir l'option Force HTTPS à l'aide de la fonction d'administration, le message d'avertissement suivant s'affiche:

Avertissement
HTTPS n'a pas été activé car il n'est pas disponible sur ce serveur.
Le test de connexion HTTPS a échoué avec l'erreur suivante:
L'opération a expiré après 1000 millisecondes avec 0 octet reçu

enter image description here

Mais si je modifie le fichier configuration.php et que $ force_ssl est défini sur '2', cela fonctionne.

J'imagine que cela a quelque chose à voir avec l'exécution sous IIS et/ou avec une machine virtuelle Azure.

Comment puis-je résoudre cet avertissement?

3
RenniePet

Le message est généré parce que l'appel à curl de l'URL racine du site avec https a généré une exception afin que vous puissiez regarder.

Le bloc try/catch est dans les lignes administrateur/composants/com_config/model/application.php 126-159, donc si vous pouvez effectuer une étape à la fois dans un débogueur, vous devriez voir ce qui ne va pas. Pas de débogueur? Insérer des instructions d'écho à des endroits appropriés vous aidera, tant que cela ne vous gêne pas, par exemple, de cacher votre vue dans le panneau d'administration. (Je suppose que vous pouvez essayer de vous connecter à la sortie de la console, si vous préférez.)

Si votre problème est que curl n’est pas disponible, et que cela échoue, j’ai peur de ne pas savoir comment l’installer pour IIS (je suppose que c’est possible, À un moment donné, b/c MS distribuait Joomla sur l’un des CD de ses applications Web lorsqu’ils faisaient la cour PHP devs pour IIS). Je suppose que c’est aussi simple que de localiser le fichier php.ini et de le tourner il est activé (vérifiez dans le panneau "Informations système" sous "Système" dans l’administrateur Joomla pour savoir où le trouver).

De plus, grâce à @mickmackusa, j’ai jeté un second coup d’œil à cette erreur; oubliez ce que j'ai dit à propos de $ réponse. Ma faute. Cela n'a aucun effet sur cette erreur particulière.

JHttpFactory::getHttp($options)->get('https://' . $Host . JUri::root(true) . '/', array('Host' => $Host), 10);

est la ligne qui échoue. Oui, cela ressemble à un lot de gobbledy-gook (c'est ce que je déteste à propos de la méthode dite "fluide" de codage; c'est déroutant à lire), mais je vais le décomposer pour vous:

JHttpFactory::getHttp($options)

est ce qui obtient l'outil qui va faire la demande http. Étant donné que vous ne recevez pas d'erreur concernant un appel de méthode incorrect, nous pouvons supposer que cet appel aboutit. Par conséquent:

get('https://' . $Host . JUri::root(true) . '/', array('Host' => $Host), 10);

est probablement notre coupable. Il y a trois arguments passés dans:

  1. URL sous forme de chaîne
  2. tableau d'en-têtes à envoyer
  3. délai d'attente en secondes

D'après le message d'erreur, il a attendu dix secondes et est revenu les mains vides. Ceci probablement excuse les en-têtes de la liste des problèmes probables, nous nous retrouvons donc avec les deux autres, ce qui pourrait vouloir dire:

  1. L'URL est mauvais
  2. Votre serveur met trop de temps à répondre, peut-être parce qu'il ne peut pas se retrouver. (Cela semble étrange, mais je l'ai vu arriver.)

Donc, essayez d'abord de faire écho à la chaîne d'URL en cours de construction, puis essayez de contacter cette même URL du serveur. Si vous arrêtez le délai imparti, il y a soit un problème sur le serveur lui-même, soit la résolution du nom (vous pouvez envoyer une requête ping à la chaîne de domaine - www.example.com - à partir de la ligne de commande du serveur). Surveillez le temps qu'il faut pour obtenir une réponse, peut-être que c'est juste lent. Les valeurs de délai d'attente sont difficiles; définissez-les trop longtemps et les utilisateurs sont impatients d’attendre une réponse et partent avant de voir l’erreur, des machines trop courtes et trop lentes déclenchent des erreurs inutilement.

1
Arlen