Apache 大规模虚拟主机 & suexec & fcgid

Apache 大规模虚拟主机 & suexec & fcgid

我跟着Falco 的教程/var/www/john现在,对于两个用户(例如 john 和 alice)及其相关目录(和/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“我们可以在 VirtualHost 定义中不使用 SuexecUserGroup 指令的情况下,在 mod_userdir 的帮助下调用 suexec!那么,如果在 mod_rewrite 的帮助下将 的请求www.another.site.example.com透明地转换为www.example.com/~another.site,然后使用 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 - 每个用户都有自己的端口或套接字。

相关内容