SUEXEC
— модуль apache, который позволяет запускать CGI скрипты из под имени пользователя. Насколько мне сейчас известно, невозможно одновременно использовать mod_php
и suexec
, поэтому мы будем использовать mod_fastcgi
для запуска скриптов.
Устанавливать просто из портов.
1) Соберем (и будем автоматически каждый раз собирать) апач с поддержкой suexec
Для этого:
в /etc/make.conf
добавить:
.if ${.CURDIR} == /usr/ports/www/apache13
WITH_APACHE_SUEXEC=yes
APACHE_SUEXEC_DOCROOT= /home
.endif
В “APACHE_SUEXEC_DOCROOT”
следует задавать директорию в которой располагаются пользователи и их DocumentRoot
директории, например /usr/hosting
Для другой версии Apache
измените название папки соответственно.
После этого:
# cd /usr/ports/www/apache13
# make install clean
2) Установим PHP5
Для начала убедимся, что существует бинарный файл php-cgi
, что он скомпилирован с поддержкой fastcgi
:
# /usr/local/bin/php-cgi -v
Output
PHP 5.2.6 with Suhosin-Patch 0.9.6.2 (cgi-fcgi) (built: Sep 10 2008 19:07:02)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with XCache v1.2.2, Copyright (c) 2005-2007, by mOo
Если вы не видите слово cgi-fcgi
, перекомпилируйте php с поддержкой fastcgi:
# cd /usr/ports/lang/php5
# make config
# make install clean
3) Сконфигурируем FreeBSD Apache mod_fastcgi
Установим mod_fastcgi
:
# cd /usr/ports/www/mod_fastcgi
# make install clean
Откроем файл /usr/local/etc/apache/httpd.conf
и убедимся, что в нем есть следующие строки:
LoadModule fastcgi_module libexec/apache22/mod_fastcgi.so
Создадим виртуальные хосты
Например, исходные данные такие:
Доменное имя: andreyko.ru
Папка DocumentRoot: /usr/hosting/andreyko.ru/html
Папка для логов Log: /usr/hosting/andreyko.ru/logs
Папка PHP cgi-bin: /usr/hosting/andreyko.ru/cgi-bin/
Владелец папки папки /usr/hosting/andreyko.ru: andreykoru
Добавим пользователя andreykoru
# adduser
Создадим структуру папок
# mkdir -p /usr/hosting/andreyko.ru/{html,logs,cgi-bin}
# chown -R andreykoru:andreykoru /usr/hosting/andreyko.ru/
Добавим следующие строки в секцию виртуальных хостов файла httpd.conf
:
<VirtualHost *:80>
User andreykoru
Group andreykoru
ServerAdmin webmaster@andreyko.ru
DocumentRoot "/usr/hosting/andreyko.ru/html"
ServerName andreyko.ru
ServerAlias www.andreyko.ru
AddHandler php-script .php
Action php-script /cgi-bin/php.cgi
ScriptAlias /cgi-bin/ "/usr/hosting/andreyko.ru/cgi-bin/"
ErrorLog "/usr/hosting/andreyko.ru/logs/error.log"
CustomLog "/usr/hosting/andreyko.ru/access.log" combined<Directory "/usr/hosting/andreyko.ru/html">
Options -Indexes FollowSymLinks +ExecCGI
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory></VirtualHost>
Создадим php.cgi скрипт
Создадим шелл-скрипт в директории /usr/hosting/andreyko.ru/cgi-bin/php.cgi
#!/bin/sh
# Shell Script To Run PHP5 using mod_fastcgi under Apache
# Tested under FreeBSD 6.x and 7.x
### Set PATH ###
PHP_CGI=/usr/local/bin/php-cgi
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
### no editing below ###
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI
Сохраним приведенный скрипт в папке /usr/hosting/andreyko.ru/cgi-bin/
под именем php.cgi
. Установим права на выполнение:
# chmod +x /usr/hosting/andreyko.ru/cgi-bin/php.cgi
Перезапустим Apache
# /usr/local/etc/rc.d/apache22 restart
или
# apachectl restart
Проверка
Проверка FAST_CGI
Создайте любой php файл в директории /usr/hosting/andreyko.ru/html/
Проверка SUEXEC
В папке /var/log/apache-suexec.log
должны появиться следующие записи:
[2011-09-09 02:51:46]: info: (target/actual) uid: (andreykoru/andreykoru) gid:(andreykoru/andreykoru) cmd: php-cgi
Добавить комментарий