Estou nessa edição há alguns dias.
Eu não fiz alterações de configuração, além das atualizações normais de sistema / segurança.
Servidor é executado no Debian Wheezy
PHP 5.4.41-1 ~ dotdeb + 7.1
Nginx 1.8.0-1 ~ dotdeb + 7.1
Estou executando um aplicativo PHP / Postgresql.
O Nginx usa o php-fpm em um ambiente chrooted.
Demorei algum tempo para isolar a causa de um erro de gateway 504 incorreto que meus usuários começaram a receber na semana passada.
O log do php-fpm mostra esse tipo de erro:
2015/05/28 15:19:32 [error] 6393#6393: *792 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 90.50.31.149, server: www.myhost.com, request: "POST /myapp/?page=account&password HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.mypool.sock", host: "www.myhost.com", referrer: "https://www.myhost.com/myapp/?page=account&password"
Depois de pesquisar um pouco, eu aumentei a capacidade do php-fpm:
pm.max_children = 70
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
(o hardware pode lidar com isso)
E também adicionei a diretiva para nginx:
fastcgi_read_timeout 120;
Eu tenho o slowlog ativado e esse erro parece estar vinculado ao servidor não estar respondendo:
[28-May-2015 15:17:35] [pool mypool] pid 6970
script_filename = htdocs//app/index.php
[0x00007f509caa9de8] fgets() /usr/share/php/Net/Socket.php:486
[0x00007f509caa9740] readLine() /usr/share/php/Net/SMTP.php:335
[0x00007f509caa9568] _parseResponse() /usr/share/php/Net/SMTP.php:1278
[0x00007f509caa8d20] rset() /usr/share/php/Mail/smtp.php:381
[0x00007f509caa7d18] getSMTPObject() /usr/share/php/Mail/smtp.php:248
[0x00007f509caa7478] send() /htdocs/app/lib/mail.func.php:86
[0x00007f509caa7180] msg() /htdocs/app/lib/account.func.php:421
[0x00007f509caa69b0] sendToken() /htdocs/app/lib/account.func.php:386
[0x00007f509caa5fe8] newToken() /htdocs/app/lib/account.func.php:425
[0x00007f509caa4ce0] +++ dump failed
Parece que o erro está ocorrendo dentro da sopa interna da PEAR.
Existe uma cópia do /usr/share/php
no ambiente chrooted para o acesso ao nginx e php-fpm e garanti que a cópia está atualizada.
Meu aplicativo depende do PEAR :: Mail para enviar e-mails formatados, como quando um usuário precisa recuperar sua senha. Meus usuários são curtos, eles precisam recuperá-lo com freqüência e travar o servidor todas as vezes.
Eu configurei um cron job para reiniciar o servidor regularmente, mas isso é de curto prazo: Eu preciso que a função mail funcione corretamente como costumava fazer.
Alguém já teve uma ideia do que eu deveria / poderia fazer?
EDIT - Depois de algumas brincadeiras, parece ser uma questão de resolver corretamente o endereço do servidor smtp, que pode estar relacionado ao nginx e php-fpm sendo chrooted, já que consegui fazê-lo funcionar em um "normal" ambiente (não chrooted).
Eu posso dig
e nslookup
do servidor.
Em php.ini
, certifiquei-me de que:
allow_url_fopen on
allow_url_include on
(embora o último não pareça realmente necessário no meu caso)
Eu também me certifiquei de que o php tenha openssl e sockets habilitados.
Inclusive adicionei uma diretiva resolver
no meu nginx.conf
e copiei /etc/hosts
(com uma entrada para o meu servidor de e-mail) na árvore de chroot.
Agora, quando eu mudo o host em minhas configurações smtp, recebo mensagens de erro diferentes:
-
host = mail.server.net
o servidor trava e eu recebo um 504
-
host = ip
o servidor trava e eu recebo um 504
- host =
ssl://mail.server.net
e Failed to connect to ssl://mail.server.net:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://mail.server.net:465 (Unknown error) (code: -1, response: )]
- host =
https://mail.server.net
e Failed to connect to https://ns0.ovh.net:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to https://ns0.ovh.net:465 (Unable to find the socket transport "https" - did you forget to enable it when you configured PHP?) (code: -1, response: )]
phpinfo()
mostra
Fluxos PHP registrados : https, ftps, compress.zlib, compress.bzip2, php, arquivo, glob, dados, http, ftp, zip, phar
Transportes de soquete de fluxo registrados : tcp, udp, unix, udg, ssl, sslv3, tls
Eu vejo que não tenho o transporte de soquete "https": como posso ativá-lo?