IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Installer un serveur dédié sous Ubuntu Serveur

Date de publication : 09 décembre 2011.


III. Apache, PHP et MySQL
III-A. Apache
III-B. PHP
III-C. MySQL


III. Apache, PHP et MySQL


III-A. Apache

Apache est le serveur HTTP le plus utilisé et est produit par en The Apache Software Foundation. il va nous permettre, notamment avec le service PHP, de gérer notamment des sites web.
Procédez à l'installation d'Apache via aptitude (copier-coller l'ensemble) :

sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils \
libexpat1 ssl-cert
info Comme vous pouvez le constatez (si vous vous êtes reconnecté),suite à la modification du fichier /etc/hostname, le nom de la machine s'est bien transformé de maMachine à monsite.fr
Si vous disposez sur vos sites webs de fichiers d'index dont le nom n'est pas habituel, vous pouvez le rajouter dans le fichier /etc/apache2/mods-available/dir.conf

Vérifions si Apache connait nos ports d'écoutes :

sudo nano /etc/apache2/ports.conf

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
info Comme vous pouvez le constater, seuls les ports 80 et 443 sont ouverts, le premier pour HTTP et le deuxième pour HTTPS via notamment SSL.
Notez qu'il est possible de définir des ports ouverts en fonction de l'adresse ip via Listen ip:port (par exemple : Listen 127.0.0.1:85 n'ouvrira le port 85 qu'aux requêtes locales)
Dans un but de sécurisation, nous allons cacher la version de notre moteur Apache. Pour cela éditer le fichier suivant et modifier les propriétés ServerSignature et ServerTokens comme suit :

sudo nano /etc/apache2/conf.d/security

ServerSignature Off
ServerTokens Prod
Afin de ne pas avoir d'avertissement de la part d'Apache, nous allons modifier le fichier (normalement vide) suivant :

sudo nano /etc/apache2/httpd.conf

ServerName 127.0.0.1
Définissons maintenant le profil par défaut. Bien que non utilisé, il nous permettra d'avoir un fichier propre que l'on copiera en autant d'exemplaire que de sites souhaités.

sudo nano /etc/apache2/sites-available/default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory /var/www/>
                Options -Indexes +FollowSymLinks +MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
    
	AccessFileName .htaccess
	<Files ~ "^\.ht">
	    Order allow,deny
	    Deny from all
	    Satisfy All
	</Files>    

</VirtualHost>
Bien, les modifications sont enregistrées, mais... A quoi cela sert-il ?

- DocumentRoot : Il définit ou le serveur doit chercher le site web voulu
- Directory : Il permet de choisir les options relatives aux autorisations d'un emplacement donné.
- AccessFileName .htaccess : le fichier d'accès est appelé .htaccess, la balise Files qui suit permet d'interdire tout téléchargement de fichier dont l'extension commence par ".ht" (.htaccess mais peut être utile également pour notre fichier de mot de passe si ce dernier commence par .ht)

Ce fichier servira de base pour chacun de nos sites, nous pourrons alors copier ce fichier et en modifier certaines balises tel que 'DocumentRoot', 'Directory' ou fichiers logs.
Mais certes, pour l'instant, il nous faut avant tout un moteur PHP afin d'obtenir un résultat visible.

Redémarrons tout de même Apache suite à nos modification :

sudo /etc/init.d/apache2 restart

III-B. PHP

Le serveur Apache étant configurer, nous allons le doter d'un moteur PHP. Pour cela, installons les packages suivant :
A ne mettre que sur une seule ligne

sudo apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd \
php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming \
php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
PHP peut être utilisé de plusieurs manières. En effet, il peut être notamment lancer en ligne de commande ou via Apache. Il dispose donc de plusieurs fichiers de configurations similaires.
Nous allons ici le configurer pour apache en éditant le fichier suivant et en y modifiant les propriétés correspondantes :

sudo nano /etc/php5/apache2/php.ini

; Temps maximum d'exécution d'un script (en seconde)
max_execution_time = 30

; Temps maximum d'exécution d'un script pour parser la requête de données (en seconde)
max_input_time = 60

; Taille maximum de mémoire allouée à l'exécution d'un script.
memory_limit = 64M

; Taille maximum pour l'upload d'un fichier
upload_max_filesize = 10M

; Définit les variables EGPCS (Environment, GET, POST, Cookie, Server) comme variables globales (OBSOLETE)
register_globals = Off

; Expose aux clients la version de php utilisée
expose_php = Off

//activer la gestion de l'utf-8 sous php
mbstring.language=UTF-8
mbstring.internal_encoding=UTF-8
mbstring.http_input=UTF-8
mbstring.http_output=UTF-8
mbstring.detect_order=auto
Notre moteur PHP est maintenant prêt à fonctionner.


III-C. MySQL

MySQL est un des moteurs de bases de données (SGBD) les plus répandus notamment dans l'univers du web et est proposé par Oracle Corporation. Tout comme Apache et PHP, MySQL s'installe via aptitude.

sudo apt-get install mysql-server mysql-client libmysqlclient15-dev mysql-common
MySQL
Assistant d'installation MySQL
info Bien que nous allons empêcher tout accès distant à MySQL via l'utilisateur root, il est tout de même recommandé de choisir un mot de passe.
Configurons maintenant les options de bases suivantes de MySQL :

sudo nano /etc/mysql/my.cnf
[mysqld]

# Taille du cache pour les index
key_buffer = 32M

# Taille maximum du cahce pour une requête
query_cache_limit = 2M

# Taille total du cache des requêtes
query_cache_size = 32M

# Log et réplication de données (entraine une baisse de performance, nous le désactiverons en commentant ces lignes par un #)
#log_bin = /var/log/mysql/mysql-bin.log
#expire_logs_days = 10

# Log des requêtes trop lentes (ce ficher sera particulièrement utile pour optimiser les requêtes couteuses)
log_slow_queries = /var/log/mysql/mysql-slow.log

# Temps en seconde à partir duquel une requête est considérée trop lente
long_query_time = 2

# Langue désiré pour les messages MySQL
language = /usr/share/mysql/french

# Définition du jeu de caractères à utiliser (UTF-8)
default-character-set = utf8

# Définition du jeu de caractères collation, correspond au jeu de caractères des champs de type texte dans les bases de données (nous choisirons également UTF8)
default-collation = utf8_general_ci
[client]

# Définition du jeu de caractères à utiliser pour le client (UTF-8)
default-character-set = utf8
Une fois le fichier enregistré, nous redémarrons MySQL afin que les changement soient pris en compte

sudo /etc/init.d/mysql restart
La suite de la configuration de MySQL concerne essentiellement l'aspect sécurisation. Heureusement, un script va nous facilité la tâche :

sudo mysql_secure_installation
  • Enter current password for root (enter for none) : veuillez saisir ici votre mot de passe root tel que définit lors de l'installation de MySQL.
  • Change the root password? [Y/n] : n - Vous pouvez changer votre mot de passe root, l'ayant définit il n'y a pas si longtemps, nous répondrons non.
  • Remove anonymous users? [Y/n] : y - Nous empêchons tout accès anonyme à MySQL
  • Disallow root login remotely? [Y/n] : y - Nous retirons tout accès a distance avec l'utilisateur root
  • Remove test database and access to it? [Y/n] : y - le jeu de test n'ayant que peu d'intérêt pour nous, nous le supprimons également
  • Reload privilege tables now? [Y/n] : y - Afin de prendre en compte toutes nos modifications, nous rafraichissons les tables de privilèges.
Notre serveur MySQL étant maintenant opérationnel, nous pouvons passer à l'étape suivante.

 

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2011 Benjamin GAGNEUX. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.