Массовый виртуальный хостинг Apache, suexec и fcgid

Массовый виртуальный хостинг Apache, suexec и fcgid

Я последовал заУчебник Фалькои теперь все работает так, как и ожидалось для двух пользователей (например, Джона и Элис) с их соответствующими каталогами ( /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>
  1. Как вы можете видеть из комментариев , у меня проблемная конфигурация !ServerAdmin [email protected]SuexecUserGroup web1 web1VirtualDocumentRoot /var/www/%-3+/web

  2. Более того, для обеспечения безопасности, я думаю, IfModuleне должно быть — если mod_fcgidне загружается, то и сервер не должен, и,

  3. вместо этого Alow from allя думаю, что мне следовало бы Deny from allоткрыть каталог php-library!

  4. Как я уже сказал, я намеревался направить запрос на 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 — каждый пользователь получает свой собственный порт или сокет.

Связанный контент