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

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Set your Twitter account name in your settings to use the TwitterBar Section.