
Я последовал заУчебник Фалькои теперь все работает так, как и ожидалось для двух пользователей (например, Джона и Элис) с их соответствующими каталогами ( /var/www/john
и /var/ww/alice
).
Теперь я хочу перейти на следующий уровень: вместо определения различных виртуальных хостов /etc/apache2/sites-available/<username>
и перезапуска Apache мне нужен динамически настраиваемый массовый виртуальный хостинг (http://httpd.apache.org/docs/2.2/vhosts/mass.html). Допустим, на моем DNS-сервере есть записи для: another.site.example.com
, я хочу, чтобы его домашний каталог находился по адресу /var/www/another.site/web
.
Проблема во всех этих настройках конфигурации для suexec и mod_fcgid. Я закончил на этом черновике httpd.conf
(или мне создать файл типа /etc/apache2/sites-available/mass_virtual
?):
NameVirtualHost *:80
#default virtual host
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
ServerAdmin [email protected]
DocumentRoot /var/www/root/web/
<IfModule mod_fcgid.c>
SuexecUserGroup web-admin web-admin
<Directory /var/www/root/web/>
Options +ExecCGI
Options -Indexes
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/root/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
# ErrorLog /var/log/apache2/error.log
# CustomLog /var/log/apache2/access.log combined
ServerSignature Off
</VirtualHost>
#3rd-level subdomain virtual hosts
<VirtualHost *:80>
UseCanonicalName Off
ServerAlias *.example.com
#problematic email!
ServerAdmin [email protected]
#is this /var/www/another.site/web or /var/www/www.another.site/web for
#a request for www.another.site.example.com ?
VirtualDocumentRoot /var/www/%-3+/web
<IfModule mod_fcgid.c>
#problematic group and user!
SuexecUserGroup web1 web1
<Directory /var/www/*/web/>
Options +ExecCGI
Options -Indexes
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/*/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
# ErrorLog /var/log/apache2/error.log
# CustomLog /var/log/apache2/access.log combined
ServerSignature Off
</VirtualHost>
Как вы можете видеть из комментариев , у меня проблемная конфигурация !
ServerAdmin [email protected]
SuexecUserGroup web1 web1
VirtualDocumentRoot /var/www/%-3+/web
Более того, для обеспечения безопасности, я думаю,
IfModule
не должно быть — еслиmod_fcgid
не загружается, то и сервер не должен, и,вместо этого
Alow from all
я думаю, что мне следовало быDeny from all
открыть каталог php-library!Как я уже сказал, я намеревался направить запрос на www.another.site.example.com к пользователю в /var/www/another.site/web, но, как я прочитал в "Использование suEXEC" мы можем вызвать suexec без директивы SuexecUserGroup в определениях VirtualHost, но с помощью mod_userdir! Итак, что, если запрос
www.another.site.example.com
прозрачно преобразуется вwww.example.com/~another.site
с помощью mod_rewrite, а затем используется mod_userdir для включения suexec???
Есть ли какие-нибудь идеи или директивы, реализующие все это?
Спасибо.
решение1
на практике функция динамического vhost не является оптимальной, поскольку вы недостаточно гибки (в некоторых случаях .htaccess недостаточно). используйте скрипт для генерации vhosts или используйте что-то вроде puppet для определения vhosts (https://github.com/puppetlabs/puppetlabs-apache).
Кстати: для настройки PHP я бы использовал php-fpm (ondemand) с (mod_proxy_fcgi или mod_fastcgi). С php-fpm вам не нужен suexec — каждый пользователь получает свой собственный порт или сокет.