[Tech] Domini

Marco Ermini markoer@usa.net
Mar 10 Giu 2003 15:18:45 CEST


On Mon, 9 Jun 2003 16:21:11 +0200, "Daniele Masini" <d.masini@libero.it>
wrote:

> Se fosse possibile vorrei poter creare dei domini di livello n in
> automatico

Perche' di livello n? a che scopo?


Come altrimenti li vorresti fare, e a che scopo? se e' per fornire un
servizio web, non vedo in quale ALTRO modo tu lo possa fare...

Comunque la cosa e' relativamente semplice, ma come farla dipende da cosa
hai a disposizione (per esempio, se hai a disposizione tanti IP oppure un
solo IP fa una grossa differenza).

Ti diro' come (piu' o meno) faccio io, ma tieni conto che io ho a
disposizione tutti gli IP che voglio (con un solo IP puoi comunque fare
nam-based virtual hosts, tranne che per l'SSL perche' non si puo' fare).

Mettendo che usi Apache, crei, sotto /etc/httpd/conf un file chiamato
listen_ip.conf, ed una directory chiamata vhost (virtual hosts) (io ho
creato due directory, una per l'HTTP e una per l'HTTPS che come ti ho
detto non puoi fare se non puoi dare un IP a ciascun dominio).

Nell'httpd.conf, al posto della direttiva "Listen", metti una cosa del
tipo:

Include conf/listen_ip.conf

e in fondo al file, al posto delle dichiarazioni dei virtual hosts:

Include conf/vhosts/*.conf

Nel listen_ip.conf ci saranno gli IP a cui ascoltera' Apache:

Listen 192.168.0.1:80
Listen 192.168.0.2:80
Listen 192.168.0.3:80
Listen 192.168.0.4:80
....
(ho fatto cosi' perche' volevo che su certi IP Apache NON ascoltasse).

Poi ho creato un file template per il virtual host:

/usr/local/etc/default\:80
----
NameVirtualHost @IPADDR@:80

<VirtualHost @DOMAIN@:80>
        ServerName @DOMAIN@
        ServerAdmin webmaster@@DOMAIN@
        DocumentRoot /home/@USER@/html
        ServerAlias www.@DOMAIN@
        ScriptAlias /cgi-bin/ "/home/@USER@/cgi-bin/"
        CustomLog /home/@USER@/logs/access_log combined
        ErrorLog  /home/@USER@/logs/error_log
        <IfModule mod_ssl.c>
                SSLEngine off
        </IfModule>
        <Directory "/home/@USER@/html/">
                <IfModule mod_php4.c>
                        php_admin_flag engine on
                        php_admin_value open_basedir "/home/@USER@/html"
                </IfModule>
                Options none
        </Directory>
        <Directory "/home/@USER@/cgi-bin/">
                AllowOverride None
                Options -Includes +ExecCGI
                Order allow,deny
                Allow from all
                <IfModule mod_perl.c>
                        <Files ~ (\.pl)>
                                SetHandler perl-script
                                PerlHandler Apache::Registry
                                Options ExecCGI
                                allow from all
                                PerlSendHeader On
                        </Files>
                </IfModule>
        </Directory>
        # frontpage
        ScriptAlias /_vti_bin/_vti_adm/ /home/@USER@/_vti_bin/_vti_adm/
        ScriptAlias /_vti_bin/_vti_aut/ /home/@USER@/_vti_bin/_vti_aut/
        ScriptAlias /_vti_bin/ /home/@USER@/_vti_bin/
        Alias /error_docs /home/@USER@/error_docs
        ErrorDocument 400 http://www.@DOMAIN@/error_docs/bad_request.html
</VirtualHost>

<VirtualHost webmail.@DOMAIN@:443>
        ServerName webmail.@DOMAIN@
        ServerAlias mail.@DOMAIN@
        DocumentRoot /usr/share/squirrelmail
        <Directory /usr/share/squirrelmail>
                <IfModule mod_php4.c>
                        php_admin_flag engine on
                        php_admin_flag magic_quotes_gpc off
                        php_admin_value open_basedir
"/usr/share/squirrelmail"                </IfModule>
        </Directory>
</VirtualHost>
----

Poi ho creato uno script che creasse un utente ed il suo dominio:

/usr/local/bin/create_vhost
----
#!/bin/sh
# create virtual host
# usage:
# create_vhost username domainname.ext num.of.ip.addr

[ -z "${1}" ] && {
        echo $"Usage: create_vhost <username> <domainname.ext>
<num.of.ip.addr>" >&2        exit 1
}
[ -z "${2}" ] && {
        echo $"Usage: create_vhost <username> <domainname.ext>
<num.of.ip.addr>" >&2        exit 1
}
[ -z "${3}" ] && {
        echo $"Usage: create_vhost <username> <domainname.ext>
<num.of.ip.addr>" >&2        exit 1
}

echo "> Creating user '$1' for domain '$2' with IP address '$3'"
echo "> creating user $1..."
useradd -m $1

echo "> fixing permissions in home directory..."
[...]

echo "> creating Apache's HTTP error messages..."
[...]

echo "> creating Apache's virtual domain for $2..."
cp /usr/local/etc/default\:80  /etc/httpd/conf/vhosts/$2\:80
[...]

sed --expression=s/@DOMAIN@/$2/ /etc/httpd/conf/vhosts/$2\:80 >
/tmp/tmpfile.$1 mv /tmp/tmpfile.$1 /etc/httpd/conf/vhosts/$2\:80
sed --expression=s/@USER@/$1/   /etc/httpd/conf/vhosts/$2\:80 >
/tmp/tmpfile.$1 mv /tmp/tmpfile.$1 /etc/httpd/conf/vhosts/$2\:80
sed --expression=s/@IPADDR@/$3/ /etc/httpd/conf/vhosts/$2\:80 >
/tmp/tmpfile.$1 mv /tmp/tmpfile.$1 /etc/httpd/conf/vhosts/$2\:80
[...]

# add to apache Listen directive

echo "> adding $3 to the Apache's 'listen' directive..."
echo "Listen @IPADDR@:80" > /tmp/tmpfile.$1
sed --expression=s/@IPADDR@/$3/ /tmp/tmpfile.$1 >>
/etc/httpd/conf/listen_ip.conf[...]

# restart services

echo "> restarting services..."
/sbin/service httpd   restart
/sbin/service proftpd restart
/sbin/service qmail restart
/sbin/service monit restart
[...]
-----

Non so se il meccanismo ti e' chiaro. Allo stesso modo, io configuro tutta
una serie di altre cose (proftpd, qmail, webalizer, mrtg ecc.).

Non so se era quello che ti serviva...

Ovviamente, devi riavviare Apache ogni volta che crei un dominio. In genere
non e' un gran problema, ma se vuoi che gli utenti possano crearsi in
automatico dei virtual host devi attrezzarti, certamente un solo server non
ti basta :-)


ciao

-- 
Marco Ermini
http://macchi.markoer.org - ICQ 50825709 - GPG KEY 0x64ABF7C6 - L.U. #180221
Perche' perdere tempo ad imparare quando l'ignoranza e' istantanea? (Hobbes)
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        non disponibile
Tipo:        application/pgp-signature
Dimensione:  189 bytes
Descrizione: non disponibile
URL:         <http://lists.linux.it/pipermail/flug-tech/attachments/20030610/cb63e5c5/attachment.pgp>


Maggiori informazioni sulla lista flug-tech