
ich folgteFalcos Tutorialund jetzt funktioniert alles wie erwartet für 2 Benutzer (z. B. John und Alice) mit ihren relevanten Verzeichnissen ( /var/www/john
und /var/ww/alice
).
Nun möchte ich zum nächsten Level übergehen: Anstatt verschiedene virtuelle Hosts zu definieren /etc/apache2/sites-available/<username>
und Apache neu zu starten, benötige ich dynamisch konfiguriertes virtuelles Massenhosting (http://httpd.apache.org/docs/2.2/vhosts/mass.html). Angenommen, mein DNS-Server hat Einträge für: another.site.example.com
, dann soll sich sein Home-Verzeichnis unter befinden /var/www/another.site/web
.
Das Problem sind all diese Konfigurationseinstellungen für suexec und mod_fcgid. Ich bin bei diesem Entwurf gelandet httpd.conf
(oder sollte ich eine Datei wie diese erstellen /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>
Wie Sie den Kommentaren entnehmen können, habe ich ein problematisches , ein und eine Konfiguration!
ServerAdmin [email protected]
SuexecUserGroup web1 web1
VirtualDocumentRoot /var/www/%-3+/web
Darüber hinaus sollte es meiner Meinung nach aus Sicherheitsgründen
IfModule
nicht existieren - wennmod_fcgid
nicht geladen werden kann, sollte auch der Server nicht geladen werden undstattdessen
Alow from all
sollte ich meiner Meinung nachDeny from all
ein PHP-Bibliotheksverzeichnis öffnen!Wie gesagt, meine Absicht ist eine Anfrage, dass www.another.site.example.com an den Benutzer unter /var/www/another.site/web weitergeleitet wird, aber wie ich unter "Verwenden von suEXEC„Wir können suexec ohne die SuexecUserGroup-Direktive in VirtualHost-Definitionen aufrufen, aber mit Hilfe von mod_userdir! Was also, wenn eine Anforderung mit Hilfe von mod_rewrite
www.another.site.example.com
transparent in umgewandelt wird und dann mod_userdir verwendet wird, um suexec zu aktivieren???www.example.com/~another.site
Irgendwelche Ideen oder Richtlinien zur Umsetzung all dieser Dinge?
Danke.
Antwort1
in der Praxis ist die dynamische Vhost-Funktion nicht optimal, da Sie nicht flexibel genug sind (.htaccess ist in einigen Fällen nicht ausreichend). Verwenden Sie ein Skript zum Generieren der Vhosts oder etwas wie Puppet zum Definieren der Vhosts (https://github.com/puppetlabs/puppetlabs-apache).
Übrigens: Für Ihr PHP-Setup würde ich PHP-FPM (OnDemand) mit (mod_proxy_fcgi oder mod_fastcgi) verwenden. Mit PHP-FPM benötigen Sie kein Suexec – jeder Benutzer erhält seinen eigenen Port oder Socket.