Plan du KiWi
Si vous n'avez pas trouvé votre bonheur dans les liens plus haut, le plan vous montrera les quelques pages “cachées” de ce kiwi !
Tout d'abord, faîtes :
cd /usr/ports/www/apache22 && make install WITHOUT_DAV_MODULES=yes clean
Vous avez le temps, vous pouvez prendre une pause là.
Une fois la compilation terminé, il faut automatiser le lancement du daemon HTTP au démarrage du serveur. Pour cela il faut ajouter ajouter deux lignes au fichier /etc/rc.conf:
# echo 'apache22_enable="YES"' >> /etc/rc.conf # echo 'apache22_flags="-DSSL"' >> /etc/rc.conf # Active le support de SSL
Il faut ensuite éditer le fichier /usr/local/etc/apache22/httpd.conf pour le faire coller à votre configuration. Il existe un bon nombre de documentations sur le sujet (par exemple: http://httpd.apache.org/docs/2.2/).
# vi /usr/local/etc/apache22/httpd.conf
Vous pouvez tester si votre installation a marché correctement en lancant le serveur Web:
# /usr/local/etc/rc.d/apache22 start
Puis en ouvrant un navigateur sur l’URL de votre serveur. Vous devrier avoir une page avec écrit “It Works!”
Le répertoire racine de votre site Web se trouve: /usr/local/www/apache22/data. (Sauf si vous l'avez modifié)
Pour que Apache puisse s'éxécuter dans de bonnes conditions : Il faut que votre repertoire “top” (typiquement /usr/local/www/apache22/data et tout ce qu'il y a en dessous soit chmodé de la sorte :
chmod -R 754 reptop
. (Attention aux scripts qui ont des besoins spécifiques !)
Et vos fichiers doivent également être “chowné” de la sorte :
chown -R kinji:www (sur tout les fichiers depuis reptop)
(C'est valide pour mon user, adaptez pour le votre et si vous avez plusieurs utilisateurs…vous n'êtes pas idiot !)
Et pour vous garantir un fonctionnement optimal :
pw user mod www -G kinji
Vous rajoutez www à votre groupe correspondant à votre utilisateur. Ce qui permet à Apache de traiter les fichiers que vous déposez manuellement sur le serveur. Autrement il vous faudrait les chmoder à chaque fois.
En l’état actuel de la configuration, votre serveur ne prendra pas en compte le language PHP. Il faut pour cela installer le module PHP (version 5) pour Apache. Pour cela:
# cd /usr/ports/lang/php5 && make install clean
… Ne pas oublier de selectionner “Apache” !!!
# cd /usr/ports/lang/php5-extensions && make install clean
… choisir les extensions voulues …
Les extensions que j'ai installés sont :
bcmath,bz2,calendar,ctype,curl,date,dba,dom,exif,filter,ftp,gd,gettext,hash, iconv,json,ldap,libxml,mbstring,mcrypt,mhash,mysql,mysqli,odbc,openssl, pcre,pdo,pdo_sqlite,posix,reflection,session,shmop,simplexml,soap,sockets, spl,sqlite,standard,sysvmsg,tokenizer,wddx,xml,xmlreader,xmlwriter,zip,zlib. Vous pourrez utiliser les ports pour ajouter ou supprimer des extensions à tout moment par la suite.
# cp /usr/local/etc/php.ini-recommended /usr/local/etc/php/php.ini
(Un petit conseil de parano : mettez la variable expose = Off, ça évitera à des importuns de savoir si vous tournez avec ou sans php) … initialisation des variables…
Il faut ensuite configurer Apache pour qu’il prenne en compte PHP. Pour cela éditer le fichier /usr/local/etc/apache22/httpd.conf:
# vi /usr/local/etc/apache22/httpd.conf
Ajouter dans la section <IfModule mime_module>:
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
Ajouter dans la section <IfModule dir_module>:
DirectoryIndex index.html, index.php
Par la suite, je vous conseille d'installer PHPSecInfo, qui peux vous aider à configurer votre php.ini de manière un peu plus sécurisé. Sachez que toutefois que ça n'a RIEN à voir avec un véritable outil d'audit de sécurité. D'ailleurs attention à bien tester
En ce qui concerne SSL :
Génération d'un certificat : Nous utilisons le répertoire personnel de root pour assurer la sécurité des fichiers qui seront générés.
cd
Création de la clé privée du serveur :
openssl genrsa -des3 -out server.key 1024 Generating RSA private key, 1024 bit long modulus ......................++++++ ...........++++++ e is 65537 (0x10001) Enter pass phrase for server.key: Verifying - Enter pass phrase for server.key:la passphrase qu'il faudra conserver
Nous générons une demande de certificat :
openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:la passphrase donnée précédemment You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:. Locality Name (eg, city) []:. Organization Name (eg, company) [Internet Widgits Pty Ltd]:. Organizational Unit Name (eg, section) []:. Common Name (eg, YOUR name) []:Le nom exact de votre serveur web Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:un mot de passe solide (vous n'avez nul besoin de le mémoriser) An optional company name []:
On termine en signant le certificat :
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok subject=/C=FR/CN=apache20 Getting Private key Enter pass phrase for server.key:
Installation du certificat et de la clé privée :
Apache 2.2 :
cp ~/server.key /usr/local/etc/apache22/ cp ~/server.crt /usr/local/etc/apache22/ chmod u=r,go= /usr/local/etc/apache22/server.key chmod u=r,go= /usr/local/etc/apache22/server.crt
Si vous ne désirez pas que le serveur Apache vous demande la passphrase à chacun de ses démarrages, vous pouvez supprimer son cryptage par la passphrase en procédant ainsi :
# On conserve une copie du certificat chiffré cp /usr/local/etc/apache22/server.key /usr/local/etc/apache22/server.key.orig # On supprime ce cryptage openssl rsa -in /usr/local/etc/apache22/server.key -out /usr/local/etc/apache22/server.key
Apache 2.2 n'est initialement pas prévu pour pouvoir stopper la prise en charge du protocole HTTPS comme c'est le cas d'Apache 1.3 et 2.0 en omettant le paramètre -DSSL. Vous pouvez rectifier le tir si besoin en modifiant les deux parties suivantes : Le chargement du module SSL si explicitement demandé via la ligne de commande de lancement du serveur Apache :
LoadModule ssl_module libexec/apache22/mod_ssl.so
En :
<IfDefine SSL>
LoadModule ssl_module libexec/apache22/mod_ssl.so
</IfDefine>
L'analyse du fichier annexe dédié à la configuration de ce module si spécifié :
# Secure (SSL/TLS) connections #Include etc/apache22/extra/httpd-ssl.conf
En :
# Secure (SSL/TLS) connections
<IfModule mod_ssl>
Include etc/apache22/extra/httpd-ssl.conf
</IfModule>
N'oubliez pas de rajouter dans httpd.conf
Listen 443
Il ne reste plus qu’a relancer le serveur Apache:
# /usr/local/etc/rc.d/apache22 restart
Voili, vous avez un beau système à jour avec une belle version d’Apache…
Si vous avez une erreur du genre httpready, il vous faut charger le module accf_http avec kldload.
# kldload accf_http
Si le module charge correctement alors vous n'aurez aucune erreurs en sortie. Pour que ce dernier charge au boot, ajoutez cela au fichier /boot/loader.conf.
accf_http_load="YES"
Si par malheur, il vous dit que le module n'existe pas. Ce n'est pas grave, il suffit de le compiler :
cd /usr/src/sys/modules/accf_http && make install clean
Moi je les structure comme ça, je trouve ça plus élégant. Pour ce qui est des vhosts ils sont nommés de cette forme : domain.com-vhost.conf
/var/www/domain.com/www/ /var/www/domain.com/<nom du vhosts> /var/www/pma /var/www/phpsysinfo
Vous pouvez les ajouter soit à httpd.conf ou bien à un nouveau fichier .conf dans le dossier /usr/local/etc/apache22/Includes. Tout les fichiers .conf dans ce dossier seront prit en compte comme si ils faisaient partis directement du fichier httpd.conf.
#www.yourdomain.com <VirtualHost *> ServerName www.yourdomain.com ServerAdmin root@yourdomain.com UseCanonicalName Off VirtualDocumentRoot /var/www/yourdomain/ #logs : ErrorLog /var/logs/yourdomain.com/sousdomaine/error.log CustomLog /var/logs/yourdomain.com/sousdomaine/access.log combined </VirtualHost>
Dans l'exemple précédent, quand un utilisateur ira sur www.yourdomain.com ou sur stuff.yourdomain.com, Apache va voir la directive de virtual host et va lui servir la page issu du dossier /var/www/yourdomain/
Je vous conseille de faire un fichier default.conf qui ressemble à celui-ci : (Attention avec les * et les *:port si vous utilisez aussi des vhosts SSL, il faudra préciser le port 80 pour les vhosts non SSL)
NameVirtualHost *
<VirtualHost *>
ServerAdmin admin_at_f00.fr
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/f00.fr/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
</VirtualHost>
NameVirtualHost *:443 !ATTENTION - cette ligne ne doit apparaître qu'une seule fois ! <VirtualHost *:443> SSLEngine On SSLCertificateFile /usr/local/etc/apache22/apache.crt SSLCertificateKeyFile /usr/local/etc/apache22/server.key ServerName sousdomaine.yourdomain.com ServerAdmin admin@domain.ltd UseCanonicalName Off VirtualDocumentRoot /var/www/yourdomain/sousdomaine #logs : ErrorLog /var/www/logs/yourdomain.com/sousdomaine/error.log CustomLog /var/www/logs/yourdomain.com/sousdomaine/access.log combined </VirtualHost>
Attention, le fichier /usr/local/etc/apache22/httpd.conf peut contenir des éléments comme ceux ci déjà présents, pas de doublons !
Un conseil, si il n'y a que cette directive Alias, évitez là et remplacer tout les /icons/ par le répertoire ou se trouve ces derniers. Cela vous permettra de décharger Apache d'un module !
Alias /icons/ "/usr/local/www/apache22/icons/" <Directory "/usr/local/www/apache22/icons/"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> HeaderName /icons/HEADER.html ReadmeName /icons/README.html IndexOptions FancyIndexing SuppressDescription SuppressRules SuppressHTMLPreamble IconsAreLinks FoldersFirst XHTML AddIconByEncoding (CMP,/icons/tgz.png) x-compress x-gzip AddIconByType (IMG,/icons/image.png) image/* AddIconByType (SND,/icons/audio.png) audio/* AddIconByType (VID,/icons/video.png) video/* AddIcon /icons/bin.png .bin .exe AddIcon /icons/binary.png .hqx AddIcon /icons/tar.png .tar AddIcon /icons/tgz.png .Z .z .tgz .gz .zip AddIcon /icons/ps.png .ps .ai .eps AddIcon /icons/html.png .html .shtml .htm .pdf AddIcon /icons/txt.png .txt AddIcon /icons/c.png .c AddIcon /icons/c.png .pl .py AddIcon /icons/tex.png .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.png .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.png .tex AddIcon /icons/core.png core AddIcon /icons/up.png .. AddIcon /icons/readme.png README AddIcon /icons/dir.png ^^DIRECTORY^^ AddIconByType (TXT,/icons/txt.png) text/* DefaultIcon /icons/unknown.png
Pour personnaliser votre configuration apache, je vous engage à lire la page Optimisation Apache.