2017-08-23 5 views
0

J'essaie de comprendre un problème qui a fait surface dans nos systèmes aujourd'hui en ce qui concerne la communication entre un environnement de travail AWS Elastic Beanstalk (appelons cela le " worker ") avec une instance EC2 autonome (appelons cette instance " EC2 "). Le travailleur envoie deux requête POST en utilisant stream_context_create. Le premier est envoyé à un environnement serveur Web AWS Elatic Beanstalk (appelons cet environnement "serveur-web") et le second est envoyé au EC2 qui est censé recevoir, traiter la demande et envoyer une réponse .Mon AWS EC2 a cessé de recevoir des données POST des environnements de travail AWS

Ces deux demandes étaient envoyées, reçues, traitées et répondues correctement sans aucun problème jusqu'à aujourd'hui. Mais alors cet après-midi, j'ai réalisé la deuxième demande de l'travailleur à EC2 avait cessé de fonctionner. L'environnement EC2 recevait la demande, mais les données POST étaient vides.

J'ai d'autres environnements web serveur AWS Elastic Beanstalk (appelons-les « autres serveurs web ») qui sont également communiquaient avec EC2 de la même façon que le travailleur (exactement la même structure de code) et EC2 reçoit correctement les données POST de leur part. Donc, je suis perdu pour savoir pourquoi les données de demande de l'travailleur est reçu vide par EC2.

Voici la structure de code qui est utilisé pour envoyer la demande du travailleur -EC2. La structure est la même pour toutes les demandes que j'envoie.

$url = 'https://ec2-99-99-999-999.ap-southeast-2.compute.amazonaws.com/path'; 

    $data = array(
     'key' => 'key_value', 
     'document' => 'html_code_string' 
    ); 

    // use key 'http' even if you send the request to https://... 
    $context = stream_context_create(array(
     'http' => array(
      'method' => 'POST', 
      'header' => [ 
       'Content-Type: application/x-www-form-urlencoded', 
       'Cv-Forwarded-For: ' . $_SERVER["REMOTE_ADDR"] 
      ], 
      'content' => http_build_query($data), 
     ), 
     'ssl'=>array(
      'verify_peer'=>false, 
      'verify_peer_name'=>false 
     ) 
    )); 

    $result = file_get_contents($url, false, $context); 

Sur EC2, j'utilise le tableau $ _POST pour accéder aux données de demande, mais il est vide lorsque la demande est envoyée au travailleur . Ce même tableau contient les données de demande lorsque la demande est envoyée par les autres serveurs Web .

Lorsque la même base de code est utilisé pour envoyer une demande du travailleur au serveur web, le serveur web reçoit les données comme prévu. Et lorsqu'une requête est envoyée à partir des autres serveurs Web à EC2, elle reçoit également les données de demande comme prévu.

Il semble donc y avoir un problème lorsqu'un environnement AWS Worker tente d'envoyer une demande de publication à une instance AWS EC2. Est-ce que quelqu'un d'autre a connu ce comportement?

Toute aide sera sincèrement appréciée.

Merci d'avance.

Prathamesh.

+0

Salut tout le monde, une mise à jour. J'ai essayé d'envoyer la demande en utilisant Postman, et j'ai trouvé que si j'utilise le paramètre de données de formulaire, la demande fonctionne comme prévu lorsque les données POST sont reçues. Une autre chose intéressante que j'ai trouvée est que lorsque je supprime la chaîne html des données de la requête et que je garde le type de contenu comme x-www-form-urlencoded, les données de la requête restante sont reçues. Il semble donc que l'envoi de la chaîne html gâche toute la requête. Faites-moi savoir si cela vous a été utile. –

+0

Salut tout le monde, j'essaie toujours de résoudre ce problème ... J'ai essayé différentes combinaisons de systèmes et ils semblent tous fonctionner dans mon environnement local même avec la chaîne html dans le corps de la requête. J'ai essayé une chaîne html relativement plus petite dans le corps de la requête et cela a également fonctionné sur l'instance EC2 qui cause le problème. Cela concerne-t-il la taille de la variable de données de demande? L'ensemble de la requête est de 75702 octets (~ 0.7MB) ce qui tombe bien en deçà des 8 Mo autorisés par mon php.ini. –

Répondre

0

J'ai mes systèmes fonctionnels pour l'instant. J'avais mis à jour les certificats SSL pour les différentes instances où nous exécutons nos services (pas l'instance EC2 qui ne recevait pas la requête correctement) ni l'environnement de travail car ils fonctionnent à partir de domaines AWS. Mais pour une raison quelconque, lorsque j'ai téléchargé du code de débogage dans l'instance EC2 en tant que nouvelle base de code, tout a soudainement recommencé à fonctionner. Je n'ai aucune idée de comment le problème a commencé et pourquoi après avoir mis à jour la base de code avec juste quelques lignes de débogage supplémentaires pour trouver où le problème se produisait que tout a recommencé à fonctionner.

Il semble que l'instance EC2 ait juste besoin d'un rafraîchissement mais je n'ai pas actualisé l'instance EC2. Ce n'est qu'une supposition car j'ai épuisé toutes les explications possibles dans le domaine de la connaissance que je possède, ce qui n'est apparemment pas suffisant pour l'expliquer. À l'avenir, je garderai à l'esprit la stratégie de mise à jour du code, mais si vous pensez que quelque chose mérite d'être regardé, faites-le moi savoir.

Merci et salutations,

Prathamesh.