Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
D'abord je dois dire que c'est la première fois que j'essaye d'utiliser postgresql: soyez indulgent !
J'ai installé sur un serveur windows 2003 la version 9.1.4 de postgresql.
Depuis une application PHP située chez un hébergeur j'essaye d'accéder à une base de données mais rien n'y fait (could not access ...).
- l'hébergeur supporte postgresql vers l'extérieur
- dans le fichier postgresql.conf, j'ai bien listen_addresses='*'
- dans le fichier pg_hba.conf, j'ai rajouté au début host all all 0.0.0.0/0 md5
- avec pgadminIII, j'ai crée une base de données test, owner = postgres
Mon application PHP ne fait que pg_connect("host=adresse_ip_de_mon_serveur_windows_2003 port=5432 dbname=test user=postgres password=pw_de_postgres")
- avec shieldUP! j'ai testé que le port 5432 est bien ouvert et le NAT correct
- mon firewall affiche postgres.exe listen on 5432
- depuis cmd.exe, sur le serveur, si je fais psql -U postgres test, j'obtiens test =#
Ai-je oublié quelque-chose ?
merci
Hors ligne
Bonjour,
à priori vous n'avez pas oublié quoi que ce soit. Quel est le message d'erreur exact affiché lors de la connexion ? Avez-vous bien décommenté la ligne listen_addresses et redémarré l'instance postgres ?
Julien.
https://rjuju.github.io/
En ligne
merci,
could not access ... est le message. Le timeout est long
la ligne est bien décommentée. elle l'est par défaut dans la version 9.1.4
j'ai relancé plusieurs fois le service également
Hors ligne
Il ne s'agit pas d'un message d'erreur standard. Avez-vous fait dans votre script un pg_connect() or die ('Could not access...'); ?
Que se passe-t-il si depuis votre serveur windows en ligne de commande vous essayez "psql -h ip_du_serveur -U postgres test" ? Si cela fonctionne, essayez également depuis le serveur php ou un autre machine distante.
Julien.
https://rjuju.github.io/
En ligne
- j'ai fait pg_connect seulement. L'erreur est extraite du log de l'hébergeur.
- psql -h ... donne connection timeout (0x00002746/10060)
- depuis le serveur php je ne sais comment faire
Hors ligne
Vous avez un problème dans votre installation windows. Soit le firewall bloque toujours les accès, soit un autre problème réseau. Selon l'accès internet de la machine, il peut y avoir des problème de NAT par exemple.
Julien.
https://rjuju.github.io/
En ligne
Pourquoi cela passe avec Mysql ?! J'ai copié les règles et changé 3306 en 5432 !
J'ai testé avec shieldUP! le NAT: est-ce suffisant pour dire que ca marche ?
Le FW dit que Postgres écoute sur 5432: est-ce suffisant pour dire que ca marche ?
Auriez-vous d'autres tests à me suggérer ?
Peut-on tracer plus de choses qui pourraient m'aider avec Postgresql ?
Variables d'environnement ? A part le path vers /bin ?
Je viens de faire nmap -v 192.168.1.100 -sT -p 5400-5500
J'obtiens 5432/tcp open postgresql
Je viens de faire netstat -a -p TCP
J'obtiens TCP dev:5432 dev.dev.local:0 en ecoute
Dernière modification par phicarre (15/09/2012 16:03:53)
Hors ligne
Comment le serveur est-il connecté à internet ? Il faudrait si possible le détail de votre installation réseau coté postgresql.
Sinon, tant que le script php n'atteindra pas le serveur postgres, aucune trace de postgres ne pourra vous aider.
Essayez également un nmap sur l'adresse publique du serveur windows pour vérifier que le NAT est correct.
Julien.
https://rjuju.github.io/
En ligne
L'adresse est bien sur l'adresse privée. Je fais des tests avec. Le serveur est derrière un router et un modem qui fait du NAT. L'adresse public est celle que j'ai appelée "adresse_ip_de_mon_serveur_windows_2003", celle figurant dans la commande pg_connect du script php situé sur une machine d'un hébergeur (héberge mon application web). Le serveur 2003 est chez moi. J'espère que c'est plus clair maintenant.
nmap -v adresse_ip_de_mon_serveur_windows_2003 -sT -p 5400-5500 répond que les ports sont filtrés. Je ne maîtrise pas cet outil :-(
La règle du firewall est: autoriser TCP ou UDP entrant/sortant depuis MAC Tout vers MAC Tout où le port source est Tout et le port de destination est 5432, une seconde règle autorise Tout sur Tout en sortie.
Dernière modification par phicarre (15/09/2012 23:49:07)
Hors ligne
Le premier problème qui me vient à l'esprit si la connexion marche avec l'adresse locale mais pas l'adresse publique est un problème de nat, port 5432 non forwardé, ou sur une mauvaise adresse ou mauvais port de destination ?
Sinon, seul le TCP est nécessaire pour postgresql, mais ajouter l'UDP ne gênera pas.
Julien.
https://rjuju.github.io/
En ligne
Alors là je tombe des nues ...
J'ai enlevé l'arobase devant pg_connect et ça passe !
Avez-vous une explication ? Est-ce une erreur chez l'hébergeur ? Un paramètre qui manque ?
Dans le cas où pg_connect retourne false j'ai voulu tester pg_last_error mais cette fonction retourne rien ! mauvaise méthode ?
Dernière modification par phicarre (16/09/2012 16:48:30)
Hors ligne
C'est effectivement étrange, cela n'est censé influer que sur l'affichage des erreurs. Pouvez-vous bien interroger votre base de donnée ? Et si vous remettez le @ cela ne refonctionne plus ?
Si la connexion ne se fait pas, pg_last_error n'est pas utilisable.
Julien.
https://rjuju.github.io/
En ligne
La base de données n'existe que de nom (rappel: je débute ...).
J'ai remis l'arobase et cela ne fonctionne plus puis j'ai enlevé l'arobase et ... cela ne fonctionne plus :-(
Je n'y comprend plus rien.
Voilà le log chez l'hébergeur:
[Sun Sep 16 18:11:35 2012] [error] [client xxxxxxxxxxx] PHP Warning: pg_connect() [<a href='function.pg-connect'>function.pg-connect</a>]: Unable to connect to PostgreSQL server: could not connect to server: Connection timed out\n\tIs the server running on host xxxxxxxxxxxxxxxxx and accepting\n\tTCP/IP connections on port 5432? in xxxxxxx
Voilà les derniers messages dans mon log:
2012-09-16 17:31:37 CEST LOG: connexion reçue : hôte=xxxxxxx port=42503
2012-09-16 17:31:37 CEST LOG: connexion autorisée : utilisateur=postgres, base de données=postgres
2012-09-16 17:31:37 CEST LOG: déconnexion : durée de la session : 0:00:00.235
utilisateur=postgres base=postgres hôte=xxxxxxx port=42503
Cela donne l'impression que postgresql se "bloque" de mon côté !
Dernière modification par phicarre (16/09/2012 18:18:39)
Hors ligne
Même si aucune table n'est créée, vous pouvez vérifier que la connexion est bonne avec par exemple "select version();" pour afficher la version du serveur postgresql.
Vous devriez commencer par développer votre site en local, en prévoyant un fichier de configuration pour l'accès à la base de donnée pour ne pas perdre de temps sur la configuration de la partie réseau.
Néanmoins, si vous voulez solutionner le problème, il faut vérifier que le NAT et le firewall sont ok. Je ne sais pas quel est le routeur ou la box utilisée, mais à priori le problème vient de la partie NAT (connexion ok via adresse pivée mais connexion impossible via adresse publique). Avez-vous bien redémarré le routeur, vérifié tous les paramètres, qu'il n'y a pas un doublon sur le port etc ?
Julien.
https://rjuju.github.io/
En ligne
oui oui oui !
Je pense qu'il y a une règle quelque-part qui empêche psql -h hostname, j'ai la même chose avec Mysql -h hostname, donc cela ne m'inquiête pas trop même si cela n'est pas propre.
Je viens de relancer le service postgresql-9.1 et cela remarche. J'ai fais plusieurs tentatives (<f5> pour rafraichir la page html contenant le script php) et cela marche toujours.
La relance du service a débloqué quelque-chose ? A part le fichier log, que peut-on analyser ?
Hors ligne
Vous avez peut-être un problème de dns pour votre ip personnelle. Vous pouvez-voir dans l'event log si vous avez eu des problèmes avec postgresql, sinon pas d'autres idées pour ma part.
Julien.
https://rjuju.github.io/
En ligne
Merci pour votre aide.
Hors ligne
Pages : 1