Добрый день!
Имеется вебхостинг с большим количеством сайтов. Все сайты на 80-м порту работают через nginx, на 81-м через apache. Существует 2 типа работы: с cgi и без. Для сайтов с cgi есть отдельный каталог в /var/www/php-bin/*/php.ini
с дополнительными конфигами.
Для этого всего нужно создать логгер всех вызовов mail() из php. Для этого было нагуглено решение с двумя скриптами.
Для начала я взял и указал sendmail-wrapper в указанных выше php.ini файлах, а так же добавил опцию:
auto_prepend_file = /usr/local/bin/env.php
На этом этапе всё пошло не так. Сайты выдают internal server error (500) в логе это:
PHP Warning: Unknown: open_basedir restriction in effect. File(/usr/local/bin/env.php) is not within the allowed path(s): (/var/www/site.ru/data:.) in Unknown on line 0
Получается так, что нужно добавить директиву open_basedir для всех сайтов.
На данном этапе мне не понятно следующее — если сайт работает через cgi, то для него имеет значение файл /etc/php5/apache2/php.ini
или нужно указывать в его отдельном файле? Сами сайты описаны вот так:
<Directory /var/www/site.ru/data/www/site.ru>
Options -Includes +ExecCGI
php_admin_value open_basedir "/var/www/site.ru/data:."
php_admin_flag engine on
</Directory>
<VirtualHost ip:81 >
ServerName site.ru
CustomLog /var/www/httpd-logs/site.ru.access.log combined
DocumentRoot /var/www/site.ru/data/www/site.ru
ErrorLog /var/www/httpd-logs/site.ru.error.log
ServerAdmin webmaster@site.ru
ServerAlias www.site.ru
SuexecUserGroup site.ru site.ru
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
php_admin_value open_basedir "/var/www/site.ru/data:."
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f webmaster@site.ru"
php_admin_value upload_tmp_dir "/var/www/site.ru/data/mod-tmp"
php_admin_value session.save_path "/var/www/site.ru/data/mod-tmp"
VirtualDocumentRoot /var/www/site.ru/data/www/site.ru/%1
ScriptAlias /cgi-bin/ /var/www/site.ru/data/www/site.ru/cgi-bin/
</VirtualHost>
Возникла мысль, что переписывать для всех sendmail_path не логично, потому можно настоящий sendmail переименовать в
/usr/sbin/sendmail-real
и его же в обёртке вызывать, которую переименовать в обычный sendmail. Но что делать с
env.php
?:
<?php
putenv("HTTP_HOST=".@$_SERVER["HTTP_HOST"]);
putenv("SCRIPT_NAME=".@$_SERVER["SCRIPT_NAME"]);
putenv("SCRIPT_FILENAME=".@$_SERVER["SCRIPT_FILENAME"]);
putenv("DOCUMENT_ROOT=".@$_SERVER["DOCUMENT_ROOT"]);
putenv("REMOTE_ADDR=".@$_SERVER["REMOTE_ADDR"]);
?>
Нужно куда-то его переместить, чтобы он был доступен для всех, но куда? А так же, будет ли это всё работать для nginx? PHP вроде общий для всех, но что-то я сомневаюсь (до этого имел место спам, который никак не детектился в прошлом логгере php mail, решил переделать)
Заранее благодарен за советы!