Installation du serveur Apache
Installer Apapche2
Activer les modules que vous souhaitez et surtout mod_reverse
[pastacode lang= »markup » manual= »access_compat.load%20%20authz_core.load%20%20deflate.load%20%20http2.load%20%20%20%20%20%20%20%20%20mpm_event.load%20%20%20%20%20%20%20proxy.conf%20%20%20%20%20%20%20%20%20%20proxy_http2.load%20%20%20%20%20rewrite.load%20%20%20%20%20%20%20%20ssl.load%0Aalias.conf%20%20%20%20%20%20%20%20%20%20authz_host.load%20%20dir.conf%20%20%20%20%20%20log_debug.load%20%20%20%20%20negotiation.conf%20%20%20%20%20proxy_connect.load%20%20proxy_http.load%20%20%20%20%20%20setenvif.conf%20%20%20%20%20%20%20status.conf%0Aalias.load%20%20%20%20%20%20%20%20%20%20authz_user.load%20%20dir.load%20%20%20%20%20%20log_forensic.load%20%20negotiation.load%20%20%20%20%20proxy_ftp.conf%20%20%20%20%20%20proxy.load%20%20%20%20%20%20%20%20%20%20%20setenvif.load%20%20%20%20%20%20%20status.load%0Aauth_basic.load%20%20%20%20%20autoindex.conf%20%20%20env.load%20%20%20%20%20%20mime.conf%20%20%20%20%20%20%20%20%20%20proxy_ajp.load%20%20%20%20%20%20%20proxy_ftp.load%20%20%20%20%20%20proxy_wstunnel.load%20%20slotmem_shm.load%20%20%20%20xml2enc.load%0Aauthn_core.load%20%20%20%20%20autoindex.load%20%20%20filter.load%20%20%20mime.load%20%20%20%20%20%20%20%20%20%20proxy_balancer.conf%20%20proxy_html.conf%20%20%20%20%20reqtimeout.conf%20%20%20%20%20%20socache_shmcb.load%0Aauthn_file.load%20%20%20%20%20deflate.conf%20%20%20%20%20headers.load%20%20mpm_event.conf%20%20%20%20%20proxy_balancer.load%20%20proxy_html.load%20%20%20%20%20reqtimeout.load%20%20%20%20%20%20ssl.conf%0A » message= »Listes des modules actifs » highlight= » » provider= »manual »/]
Paramétrage Apache
Paramétrage global
Configurer votre 1er Vhost
[pastacode lang= »apacheconf » manual= »%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%20Exemple%20Vhost%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%0A%3CVirtualHost%20*%3A80%3E%0A%20%20%20%20%20%20%20%20ServerName%20exemple.fr%0A%0A%20%20%20%20%20%20%20%20DocumentRoot%20%20%20%20%2Fvar%2Fwww%2Fexemple.fr%0A%0ATransferLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr_access.log%0AErrorLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr_error.log%0A%0A%3C%2FVirtualHost%3E%0A » message= »Exemple de Vhost http » highlight= » » provider= »manual »/]
[pastacode lang= »apacheconf » manual= »mkdir%20%2Fvar%2Fwww%2Fexemple.fr%0A%0Achown%20www-data%3Awww-data%20%2Fvar%2Fwww%2Fexemple.fr » message= »Créer le dossier du vhost » highlight= » » provider= »manual »/]
Normalement votre site est accessible à votre adresse « exemple.fr »
Pensez à faire pointer vos DNS au bon endroit et à faire les règles de par-feu (port 80 entrant vers port 80 de votre IP-serveurWEB)
Voila là ça doit marcher !
Paramétrage du SSL via ACME
Je passe les commandes d’installation de ACME accessible ICI.
Générez votre certificat SSL
[pastacode lang= »markup » manual= »acme.sh%20–issue%20-d%20exemple.fr%20-w%20%2Fvar%2Fwww%2Fexemple.fr%2F » message= » » highlight= » » provider= »manual »/]
Paramétrage du reverse proxy
Activer Module proxy de apache commande : a2enmod "lemodule" Modifier votre vhost en ajoutant la partie SSL et reverse
[pastacode lang= »apacheconf » manual= »%3CIfModule%20mod_ssl.c%3E%0A%20%20%20%20%20%20%20%20%3CVirtualHost%20*%3A443%3E%0A%0A%20%20%20%20%20%20%20%20ServerName%20exemple.fr%0A%0A%20%20%20%20%20%20%20%20SSLEngine%20on%0A%20%20%20%20%20%20%20%20SSLStrictSNIVHostCheck%20Off%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCertificateFile%20%20%20%20%20%20%2Froot%2F.acme.sh%2Fexemple.fr%2Fexemple.fr.cer%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCertificateKeyFile%20%20%20%2Froot%2F.acme.sh%2Fexemple.fr%2Fexemple.fr.key%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCertificateChainFile%20%2Froot%2F.acme.sh%2Fexemple.fr%2Fca.cer%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCACertificateFile%20%20%20%20%2Froot%2F.acme.sh%2Fexemple.fr%2Ffullchain.cer%0A%0A%20%20%20%20%20%20%20%20SSLProxyEngine%20On%0A%20%20%20%20%20%20%20%20SSLProxyCheckPeerCN%20Off%0A%20%20%20%20%20%20%20%20SSLProxyCheckPeerName%20Off%0A%20%20%20%20%20%20%20%20SSLProxyVerify%20none%0A%20%20%20%20%20%20%20%20ProxyPreserveHost%20On%0A%20%20%20%20%20%20%20%20ProxyPass%20%2F%20https%3A%2F%2Fexemple.local%2F%0A%20%20%20%20%20%20%20%20ProxyPassReverse%20%2F%20https%3A%2F%2Fexemple.local%2F%0A%0A%20%20%20%20%20%20%20%20TransferLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr-ssl_access.log%0A%20%20%20%20%20%20%20%20ErrorLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr-ssl_error.log%0A%0A%20%20%20%20%20%20%20%20%3C%2FVirtualHost%3E%0A%3C%2FIfModule%3E » message= » » highlight= » » provider= »manual »/]
Quelques explications sur les directives.
Tout d’abord la partie serveur https
- VirtualHost *:443 : précise que l’on écoute sur le port 443 (https)
- ServerName : le nom de domaine du serveur (FQDN)
- DocumentRoot : c’est juste pour information, car tout le trafic sera redirigé (d’ailleurs on ne met pas de directive Directory)
- SSLEngineOn, SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile, SSLCACertificateFile : paramétrage du SSL, avec le certificat et la clé
Viennent ensuite les directives relatives à la partie Reverse proxy :
- SSLProxyEngine : activation du mode Proxy en SSL
- SSLProxyCheckPeerCN et SSLProxyCheckPeerName : permet de ne pas vérifier le CN et le nom du serveur distant
- SSLProxyVerify : pas de vérification du serveur distant
- SSLProxyMachineCertificateFile : concaténation de la clé et du certificat de la machine (pas nécessaire si on désactive les vérifications)
- ProxyPass et ProxyPassReverse : il s’agit du paramétrage « standard » du mode reverse proxy
- ProxyPreserverHost On : garde le nom DNS du reverse proxy (sinon on récupère l’adresse IP du serveur cible)
On test et redémarre apache :
[pastacode lang= »markup » manual= »apachectl%20-t%0Aservice%20apache2%20reload » message= » » highlight= » » provider= »manual »/]
On vérifie que le serveur apache s’est lancé :
[pastacode lang= »markup » manual= »root%40reverse%3A~%23%20systemctl%20status%20apache2.service%0A%E2%97%8F%20apache2.service%20-%20The%20Apache%20HTTP%20Server%0A%20%20%20Loaded%3A%20loaded%20(%2Flib%2Fsystemd%2Fsystem%2Fapache2.service%3B%20enabled%3B%20vendor%20preset%3A%20enabled)%0A%20%20%20Active%3A%20active%20(running)%20since%20Wed%202018-08-22%2019%3A25%3A21%20CEST%3B%202%20weeks%200%20days%20ago%0A%20%20Process%3A%2016647%20ExecReload%3D%2Fusr%2Fsbin%2Fapachectl%20graceful%20(code%3Dexited%2C%20status%3D0%2FSUCCESS)%0A%20Main%20PID%3A%209935%20(apache2)%0A%20%20%20%20Tasks%3A%20129%20(limit%3A%204915)%0A%20%20%20CGroup%3A%20%2Fsystem.slice%2Fapache2.service%0A%20%20%20%20%20%20%20%20%20%20%20%E2%94%9C%E2%94%80%209935%20%2Fusr%2Fsbin%2Fapache2%20-k%20start%0A%20%20%20%20%20%20%20%20%20%20%20%E2%94%9C%E2%94%8016653%20%2Fusr%2Fsbin%2Fapache2%20-k%20start%0A%20%20%20%20%20%20%20%20%20%20%20%E2%94%94%E2%94%8016718%20%2Fusr%2Fsbin%2Fapache2%20-k%20start%0A%0Asept.%2006%2016%3A51%3A11%20reverse%20systemd%5B1%5D%3A%20Reloading%20The%20Apache%20HTTP%20Server.%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.831280%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20authn_core_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.831860%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20authz_core_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.832190%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20proxy_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.832507%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20proxy_http_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.832822%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20proxy_wstunnel_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.833171%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20headers_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.833551%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20setenvif_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20apachectl%5B16647%5D%3A%20%5BThu%20Sep%2006%2016%3A51%3A11.833873%202018%5D%20%5Bso%3Awarn%5D%20%5Bpid%2016650%3Atid%20139911641449664%5D%20AH01574%3A%20module%20ssl_module%20is%20already%20loaded%2C%20skipping%0Asept.%2006%2016%3A51%3A11%20reverse%20systemd%5B1%5D%3A%20Reloaded%20The%20Apache%20HTTP%20Server.%0A » message= » » highlight= » » provider= »manual »/]
Enfin vous pouvez ajouter une directive pour forcer la redirection entre http et https en entrant
[pastacode lang= »apacheconf » manual= »%20RewriteEngine%20On%0A%20RewriteCond%20%25%7BHTTPS%7D%20off%0A%20RewriteRule%20%5E(.*)%24%20https%3A%2F%2F%25%7BHTTP_HOST%7D%241%20%5BR%3D301%2CL%5D » message= » » highlight= » » provider= »manual »/]
En cas de souci, les commandes systemctl status et journalctl -xe permettent de débugguer les erreurs.
J’ai notamment eu un cas où le service ne voulait pas démarrer car le ServerName n’était pas renseigné dans le fichier de configuration global.
[pastacode lang= »markup » manual= »%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%20exemple.fr%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%0A%3CVirtualHost%20*%3A80%3E%0A%20%20%20%20%20%20%20%20ServerName%20%09exemple.fr%0A%0A%20%20%20%20%20%20%20%20DocumentRoot%20%20%20%20%2Fvar%2Fwww%2Fexemple.fr%0A%0A%20%20%20%20%20%20%20%20RewriteEngine%20On%0A%20%20%20%20%20%20%20%20RewriteCond%20%25%7BHTTPS%7D%20off%0A%20%20%20%20%20%20%20%20RewriteRule%20%5E(.*)%24%20https%3A%2F%2F%25%7BHTTP_HOST%7D%241%20%5BR%3D301%2CL%5D%0A%0ATransferLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr_access.log%0AErrorLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr_error.log%0A%0A%3C%2FVirtualHost%3E%0A%3CIfModule%20mod_ssl.c%3E%0A%20%20%20%20%20%20%20%20%3CVirtualHost%20*%3A443%3E%0A%0A%20%20%20%20%20%20%20%20ServerName%20exemple.fr%0A%0A%20%20%20%20%20%20%20%20SSLEngine%20on%0A%20%20%20%20%20%20%20%20SSLStrictSNIVHostCheck%20Off%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCertificateFile%20%20%20%20%20%20%2Froot%2F.acme.sh%2Fexemple.fr%2Fexemple.fr.cer%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCertificateKeyFile%20%20%20%2Froot%2F.acme.sh%2Fexemple.fr%2Fexemple.fr.key%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCertificateChainFile%20%2Froot%2F.acme.sh%2Fexemple.fr%2Fca.cer%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SSLCACertificateFile%20%20%20%20%2Froot%2F.acme.sh%2Fexemple.fr%2Ffullchain.cer%0A%0A%20%20%20%20%20%20%20%20SSLProxyEngine%20On%0A%20%20%20%20%20%20%20%20SSLProxyCheckPeerCN%20Off%0A%20%20%20%20%20%20%20%20SSLProxyCheckPeerName%20Off%0A%20%20%20%20%20%20%20%20SSLProxyVerify%20none%0A%20%20%20%20%20%20%20%20ProxyPreserveHost%20On%0A%20%20%20%20%20%20%20%20ProxyPass%20%2F%20https%3A%2F%2Fexemple.local%2F%0A%20%20%20%20%20%20%20%20ProxyPassReverse%20%2F%20https%3A%2F%2Fexemple.local%2F%0A%0A%20%20%20%20%20%20%20%20TransferLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr-ssl_access.log%0A%20%20%20%20%20%20%20%20ErrorLog%20%2Fvar%2Flog%2Fapache2%2Fexemple.fr-ssl_error.log%0A%0A%20%20%20%20%20%20%20%20%3C%2FVirtualHost%3E%0A%3C%2FIfModule%3E » message= »Mon vhost complet » highlight= » » provider= »manual »/]