Назад | Перейти на главную страницу

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

Я последовал за Учебник Фалько и теперь все работает, как ожидалось для 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>
  1. Как видно из комментариев у меня проблемный ServerAdmin webmaster@example.com, а SuexecUserGroup web1 web1 и VirtualDocumentRoot /var/www/%-3+/web конфигурация!

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

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

  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 ???

Любые идеи или директивы, реализующие все это?

Спасибо.

на практике функция динамического виртуального хоста не является оптимальной, потому что вы недостаточно гибки (в некоторых случаях недостаточно .htaccess). используйте сценарий для создания vhosts или используйте что-то вроде марионетки для определения vhosts (https://github.com/puppetlabs/puppetlabs-apache).

Кстати: для вашей настройки php я бы использовал php-fpm (ondemand) с (mod_proxy_fcgi или mod_fastcgi). с php-fpm вам не нужен suexec - каждый пользователь получает свой порт или сокет.