Apache et archlinux

De Banane Atomic
Aller à la navigationAller à la recherche

Configuration

/etc/httpd/conf/httpd.conf
# Désactiver l'accès aux répertoires utilisateur
#Include conf/extra/httpd-userdir.conf

# Dossier ou placer les pages web
DocumentRoot "/srv/http"

# Map une URL à un chemin
Alias /symfony "/usr/share/webapps/Symfony"
# si le chemin est en dehors du DocumentRoot il faut écrire un bloc Directory
<Directory "/usr/share/webapps/Symfony">
    Order allow,deny
    Allow from all
</Directory>

# Récursivement pour tous les dossiers et fichiers à partir de /srv/http
<Directory "/srv/http">
    # Interdit l'accès aux pages Index of /... et affiche la page Error 403
    DirectoryIndex disabled
    # même effet avec l'utilisation du "-" pour l'option Indexes
    Options -Indexes
    
    # Redirige l'affiche de la page Error 403 vers /MaPage.html
    ErrorDocument 403 /MaPage.html
    # Directives autorisées dans les fichiers .htaccess pour la redéfinition des droits
    AllowOverride All|None|directive

    # autorisez l'accès à tous sauf 192.168.1.1
    Order allow,deny
    Allow from all
    Deny from 192.168.1.1
</Directory>

Directive

Log

/etc/httpd/conf/httpd.conf
# définit où écrire les erreurs
ErrorLog "/var/log/httpd/error_log"
# le chemin peut-être absolu ou relatif à ServerRoot
# s'il est définit hors d'un VirtualHost, il s'applique à tous les VirtualHost
# s'il est définit dans un VirtualHost, il ne s'applique qu'à celui-ci

# définit où écrire le log d'accès ainsi que le format
CustomLog logs/access_log "%v %h %l %u %t \"%r\" %>s %T"

ErrorLog | LogFormat | CustomLog

Fichiers de log par défaut:
  • /var/log/httpd/error_log
  • /var/log/httpd/access_log

Require

/etc/apache2/sites-available/000-default.config
<Directory /var/www/html>
    AllowOverride None

    # all requests are denied
    Require all denied

    # all requests are allowed except 192.168.1.1
    Require all granted
    Require not ip 192.168.1.1

    # authoriser seulement les IPs 192.168.0.0/24
    Require ip 192.168.0.0/24

    # all hosts in the example.org domain are allowed access; all other hosts are denied access
    Require host example.org
</Directory>

Order, Allow et Deny

Depuis la version 2.4, Order, Allow et Deny sont remplacés par Require.
/etc/httpd/conf/httpd.conf
# Les directives Order, Allow et Deny doivent se trouver dans un bloc Directory
<Directory "...">
Order allow,deny
# First, all Allow directives are evaluated; at least one must match, or the request is rejected.
# Next, all Deny directives are evaluated. If any matches, the request is rejected.
# Last, any requests which do not match an Allow or a Deny directive are denied by default.

Order deny,allow
# First, all Deny directives are evaluated; if any match, the request is denied unless it also matches an Allow directive.
# Any requests which do not match any Allow or Deny directives are permitted.
</Directory>

Directive Options

/etc/httpd/conf/httpd.conf
# Ne plus suivre les liens symboliques
Options -FollowSymLinks

# Si l'url pointe vers un dossier et que celui-ci ne contient pas de page d'index (index.html, index.php, ...)
# générez une page listant le contenu du dossier
Options Indexes
Valeur par défaut: Options FollowSymlinks

Rewrite url

Bash.svg
sudo a2enmod rewrite
sc-restart apache2
/etc/apache2/sites-available/myserver.conf
<Directory "/var/www/myserver">
    RewriteEngine       On
    RewriteRule         ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/index.php [L]
</Directory>

HTTPS

Bash.svg
sudo a2enmod rewrite
sudo a2enmod ssl

sc-restart apache2
sudo systemctl daemon-reload
/etc/apache2/sites-available/myserver.conf
<VirtualHost *:80>
    ServerName www.domain.fr
    Redirect   permanent / https://www.domain.fr
</VirtualHost>

<VirtualHost *:443>
    ServerName   www.domain.fr
    DocumentRoot /var/www/myserver

    SSLEngine On
    SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    <FilesMatch "\.php$">
        SSLOptions +StdEnvVars
    </FilesMatch>

    # Turn off your server's signature
    ServerSignature Off
    
    # Hide server information like Apache and PHP versions
    ServerTokens Prod

    # accepts only strong encryption
    SSLCipherSuite HIGH:!aNULL:!MD5
</VirtualHost>

Modifiez la configuration PHP

/etc/httpd/conf/httpd.conf
<Directory "...">
php_admin_value open_basedir /path/path/:/path/path/
</Directory>

Modules

Bash.svg
# activer un module
a2enmod [module]

# désactiver un module
a2dismod [module]

# lister les modules chargés
apachectl -M
Activer un module déjà activé ne pose pas de problème. Même chose pour la désactivation.

Droits d'accès des dossiers et fichiers

Le serveur Apache accède aux dossiers et fichiers via l'utilisateur « http ».

PHP

/etc/httpd/conf/httpd.conf
# A ajouter à la fin des "LoadModule"
LoadModule php5_module modules/libphp5.so

# A ajouter à la fin des "Include"
Include conf/extra/php5_module.conf
/etc/httpd/conf/mime.types
application/x-httpd-php		php php5

Perl

Bash.svg
sudo pacman -S mod_perl
/etc/httpd/conf/httpd.conf
LoadModule perl_module modules/mod_perl.so

SSL

/etc/httpd/conf/httpd.conf
LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
/etc/httpd/conf/extra/httpd-ssl.conf
Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

SSLPassPhraseDialog  builtin

SSLSessionCache         "shmcb:/run/httpd/ssl_scache(512000)"
SSLSessionCacheTimeout  300
 
SSLMutex  "file:/run/httpd/ssl_mutex"
« Init: Session Cache is not configured » LoadModule est activé mais pas Include.

Virtual Hosts

/etc/httpd/conf/httpd.conf
# décommenter cette ligne
Include conf/extra/httpd-vhosts.conf
/etc/httpd/conf/extra/httpd-vhosts.conf
NameVirtualHost *:80
NameVirtualHost *:8080
# ne pas oublier d'ajouter Listen 8080 dans le fichier /etc/httpd/conf/httpd.conf

# serveur par défaut car sans ServerName, pointe sur /srv/http
# accessible http://localhost ou http://127.0.0.1 ou http://default-server
<VirtualHost *:80>
    DocumentRoot "/srv/http"
</VirtualHost>

# http://serveur1 pointe sur /srv/http/serveur1
<VirtualHost *:80>
    DocumentRoot "/srv/http/serveur1"
    ServerName serveur1
</VirtualHost>

# http://serveur2 pointe sur /srv/http/serveur2
<VirtualHost *:80>
    DocumentRoot "/srv/http/serveur2"
    ServerName serveur2
</VirtualHost>
# serveur1 et serveur2 peuvent avoir la même adresse IP
# Apache fera la différence grâce au ServerName

# http://serveur3:8080 pointe sur /srv/http/serveur3
<VirtualHost *:8080>
    DocumentRoot "/srv/http/serveur3"
    ServerName serveur3
</VirtualHost>

# hôte accessible via http://www.monsite.fr et http://monsite
<VirtualHost *:80>
    DocumentRoot "/srv/http/monsite"
    ServerName www.monsite.fr
    ServerAlias monsite
</VirtualHost>
# ServerName est le nom et l'identifiant principal de l'hôte virtuel
# ServerAlias contient les noms complémentaire de l'hôte virtuel
Les noms d'hôtes devront être renseignés par un serveur DNS ou ajouté au fichier /etc/hosts des clients
_default_ correspond à n'importe quelle adresse qui n'a pas trouvée de correspondance.
* à une plus grande priorité que _default_.

File does not exist: favicon.ico

C'est le message d'erreur que vous trouverez dans le fichier « /var/log/httpd/error_log » s'il n'y a pas de fichier « favicon.ico » à la racine du site web.

Bash.svg
# création d'un fichier vide favicon.ico
touch favicon.ico

Core dump

Lors d'une erreur child pid 3713 exit signal Segmentation fault (11), possible coredump in /tmp/apache-coredump
Si la mention possible coredump in n'est pas présente, les informations du noyau n'ont pas été extraites.

If Apache starts as root and switches to another user, the Linux kernel disables core dumps even if the directory is writable for the process.
Apache (2.0.46 and later) reenables core dumps on Linux 2.4 and beyond, but only if you explicitly configure a CoreDumpDirectory.
/etc/httpd/conf/httpd.conf
CoreDumpDirectory	"/tmp/apache-coredump"
CoreDumpDirectory fait planter apache au démarrage

Erreurs

Failed opening required '.../fichier.php'

PHP Fatal error:  Unknown: Failed opening required '.../fichier.php' (include_path='.:/usr/share/pear')
in Unknown on line 0, referer: http://www.url.fr/

Le fichier .../fichier.php n'est pas accessible en lecture.

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe

/etc/httpd/conf/httpd.conf
# LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Mediawiki

/etc/apache2/sites-available/mediawiki.conf
<VirtualHost *:80>
    <Directory "/var/www/mediawiki">
        AllowOverride	    All
        Options             -Indexes
        ErrorDocument 403   /index.php
        RewriteEngine       On
        RewriteRule         ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/index.php [L]
    </Directory>
</VirtualHost>

Install

Bash.svg
# installation d'apache + php + mysql
sudo pacman -S apache php php-apache mariadb

# démarrer apache pour test
sudo systemctl start httpd

# démarrer apache au démarrage du système
sudo systemctl enable httpd

Apache - Archlinux

Apache HTTPD vs Apache Tomcat

Apache HTTPD

Serveur web écrit en C.
Il possède des modules pour exploiter du contenu dynamique écrit en PHP, Python et Ruby.

Apache Tomcat

Conteneur de Servlet et de JSP écrit en Java.
Peut avoir les mêmes fonctionnalités qu'Apache HTTPD mais est utilisé pour du contenu Java web.