Я последовал за Учебник Фалько и теперь все работает, как ожидалось для 2 пользователей (например, john и alice) с их соответствующими каталогами (/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 webmaster@example.com
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 webmaster@example.com
#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 webmaster@example.com
, а SuexecUserGroup web1 web1
и VirtualDocumentRoot /var/www/%-3+/web
конфигурация!
Более того, для обеспечения безопасности я думаю IfModule
не должно существовать-если mod_fcgid
не может загружаться, тогда и сервер не должен и,
вместо того Alow from all
, Я думаю, я должен был Deny from all
и вместо этого откройте каталог php-библиотеки!
Как я уже сказал, я намерен направить запрос на 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 ???
Любые идеи или директивы, реализующие все это?
Спасибо.
на практике функция динамического виртуального хоста не является оптимальной, потому что вы недостаточно гибки (в некоторых случаях недостаточно .htaccess). используйте сценарий для создания vhosts или используйте что-то вроде марионетки для определения vhosts (https://github.com/puppetlabs/puppetlabs-apache).
Кстати: для вашей настройки php я бы использовал php-fpm (ondemand) с (mod_proxy_fcgi или mod_fastcgi). с php-fpm вам не нужен suexec - каждый пользователь получает свой порт или сокет.