我已经在这个问题上运行了几天。 除了通常的系统/安全更新之外,我没有进行configuration更改。
服务器在Debian Wheezy上运行
PHP 5.4.41-1〜dotdeb + 7.1
Nginx 1.8.0-1〜dotdeb + 7.1
我正在运行一个PHP / Postgresql应用程序。
Nginx在chrooted环境中使用php-fpm。
我花了一些时间来隔离我的用户上周开始得到的504错误网关错误的原因。
php-fpm的日志显示了那种错误:
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"
经过一番Googlesearch之后,我提出了php-fpm的能力:
pm.max_children = 70 pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 35 pm.max_requests = 500
(硬件可以处理)
我还添加了nginx的指令:
fastcgi_read_timeout 120;
我有缓慢的日志,这个错误似乎链接到服务器没有响应:
[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
这似乎是PEAR内部的问题。
在chrooted环境下有一个/usr/share/php的副本,用于访问nginx和php-fpm,并确保副本是最新的。
我的应用程序依靠PEAR :: Mail发送格式化的电子邮件,例如当用户需要恢复密码时。 我的用户心胸狭窄,他们需要经常恢复,每次都会使服务器崩溃。 我设置了一个cron作业来定期重启服务器,但这是短期的:我需要邮件function正常工作。
有没有人有一个想法,我应该/可以做什么?
编辑 – 一些玩过之后,似乎是正确解决smtp服务器的地址,这可能与nginx和php-fpm chrooted有关,因为我设法让它在“正常”环境中工作(不chroot的)。
我可以从服务器dig和nslookup 。
在php.ini ,我确信:
allow_url_fopen on allow_url_include on
(虽然后者在我的情况下看起来确实不是必要的)
我也确保php已经openssl和套接字启用。
我甚至在我的nginx.conf添加了一个resolver指令,并在chroot树中复制了/etc/hosts (带有一个用于我的邮件服务器的条目)。
现在,当我在我的smtp设置更改主机,我得到不同的错误消息:
host = mail.server.net host = ip ssl://mail.server.net 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: )] https://mail.server.net 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()显示
注册的PHPstream :https,ftps,compress.zlib,compress.bzip2,php,文件,glob,数据,http,ftp,zip,phar
注册stream套接字传输 :tcp,udp,unix,udg,ssl,sslv3,tls
我看到我没有套接字传输“https”:我怎样才能启用它?
我从你的堆栈跟踪推断出来的是:
我在这里看到的一个大问题是,如果您已经拒绝了您build议发送的邮件,则只会向邮件服务器发送RSET命令。 我怀疑邮件服务器在拒绝电子邮件之后,只是防火墙或者忽略了你。
您的下一步是联系邮件服务器pipe理员。