Pendant quelques jours, j'étais totalement bloqué sur ce sujet. Je suis très novice en matière de réseaux/vms mais j'avais envie d'essayer de le mettre en place moi-même au lieu de payer un hébergeur pour le faire à ma place.
Contexte
Je suis en train de reconstruire le côté serveur d'une application qui utilise des routines php pour renvoyer divers éléments de données provenant de sources internes ainsi que d'API externes pour une application basée sur une carte. J'ai démarré une instance Oracle VM et j'ai installé/configuré Apache et php. Tout fonctionne parfaitement, jusqu'à ce qu'une de mes routines php tente d'exécuter un cURL. Je commence à mettre en œuvre la journalisation des erreurs pour constater que je ne reçois même pas de message - juste '7', malgré une mise en œuvre très similaire à celle décrite ci-dessus. Ma routine php accédant à un fichier interne pour les données s'exécutait correctement, j'étais donc presque sûr qu'il ne s'agissait pas d'un problème Apache ou php. J'ai également vérifié mes journaux d'erreurs Apache, rien de révélateur.
Solution
J'ai failli abandonner - il est question de désactiver SELinux ci-dessus et dans d'autres articles, j'ai essayé et c'est a fait travail pour mes besoins, mais voici un très bon article sur les raisons pour lesquelles vous ne devrait pas désactiver SELinux https://www.electronicdesign.com/technologies/embedded-revolution/article/21807408/dont-do-it-disabling-selinux
Si la désactivation temporaire fonctionne et que, comme moi, vous ne voulez pas le faire (mais cela confirme que SELinux vous bloque !), j'ai trouvé une petite commande soignée qui affiche les problèmes SELinux d'une manière plus lisible :
sealert -a /var/log/audit/audit.log
Le résultat est le suivant :
found 1 alerts in /var/log/audit/audit.log
--------------------------------------------------------------------------------
SELinux is preventing php-fpm from name_connect access on the tcp_socket port 443.
Super, j'ai maintenant un peu plus d'informations que juste '7'. En lisant plus bas, je peux voir qu'il fait des suggestions :
***** Plugin catchall_boolean (24.7 confidence) suggests ******************
If you want to allow httpd to can network connect
Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean.
Do
setsebool -P httpd_can_network_connect 1
Cela a été mentionné plus haut mais maintenant j'ai un peu plus de contexte et une explication de ce que cela fait. J'exécute la commande, et c'est parti. De plus, mon SELinux est toujours réglé sur enforcing, ce qui signifie que ma machine est plus sûre.
Il y a beaucoup d'autres suggestions de déconnexion, si vous êtes bloqué, cela peut valoir la peine de se déconnecter/vérifier /var/log/audit/audit.log.
0 votes
Choisissez un proxy qui utilise un port 80
0 votes
Utiliser l'option curl verbose pour obtenir plus d'informations
0 votes
J'ajouterai deux choses ici qui ont finalement permis de résoudre mon problème : 1. exécuter cURL à partir de la ligne de commande avec
--verbose
2. Si vous êtes sous OSX avec Little Snitch (ou similaire), regardez ça.