Я создаю chroot php-fpm, и нахожусь на одном из последних шагов, прежде чем назвать это успешным.
Chroot php-fpm работает как шарм. Кроме того, я установил mini_sendmail в chroot (вместо стандартного sendmail) и могу подтвердить, что он может отправлять электронную почту:
[root@hostname site1.com]# ls bin/
bash cat sendmail test.txt
[root@hostname site1.com]# chroot .
bash-4.2# cat /bin/test.txt | ./bin/sendmail -t -i -fme@site1.com me@my-email.com
Я получаю электронное письмо, когда запускается указанная выше команда .
Однако, когда я открываю следующий php-скрипт из веб-браузера, электронное письмо не отправляется:
<?php
$message = "This is a test";
$headers = 'From: me@site1.com';
mail("me@my-email.com", "Test", $message, $headers);
echo "mail sent";
?>
Ниже приведен мой файл конфигурации пула chroot php-fpm:
[site1.com]
user = user1
group = user1
listen = 127.0.0.1:9001
listen.owner = user1
listen.group = user1
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = on
php_flag[display_errors] = on
php_admin_value[short_open_tag] = On
php_admin_value[doc_root] = www
php_admin_value[error_log] = /logs/php-errors
php_admin_flag[log_errors] = on
php_admin_value[sendmail_path] = /bin/sendmail
php_admin_value[mail.log] = /logs/maillog
php_admin_value[error_reporting] = E_ALL
pm = ondemand
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chroot = /home/www/site1.com
chdir = /www
catch_workers_output = yes
Когда я открываю php-файл из веб-браузера , Я могу подтвердить, что в почтовом журнале есть запись в соответствии с php_admin_value [mail.log]
:
mail() on [/www/mailer.php:4]: To: me@my-email.com -- Headers: From: me@site1.com
Однако в почтовом журнале сервера (за пределами chroot) ничего не отображается, и ничего отображается в журнале ошибок php.
Как я могу завершить устранение неполадок на этом последнем шаге, чтобы функция php mail ()
работала должным образом в моем chroot php-fpm? Или как я могу исправить настоящая проблема?
Я знаю, что это довольно старый вопрос, но я обнаружил, что это один из хитов, пытаясь решить ту же проблему, и поэтому, если кто-то столкнется с этим в будущем, есть еще одна вещь, которую нужно проверить. В моем случае я отсутствовал /bin/sh в среде chroot.
php передает sendmail_path в popen. popen передает команду в /bin/sh, поэтому, если в вашей среде chroot отсутствует /bin/sh, вы, похоже, получите сообщение об ошибке без регистрации