Erreur rencontrée :
Après une mise à jour d'Apache sur mon serveur, celui-çi ne voulait plus redémarrer avec cette erreur en retour.
Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration
Résolution :
Installé le paquet libapache2-mod-php5
$ sudo apt-get install libapache2-mod-php5
$ sudo service apache2 start
Activer les modules nécessaires :
$ sudo a2enmod proxy
$ sudo a2enmod proxy_balancer
$ sudo a2enmod proxy_ajp
Paramétrage en mode HTTP :
Ajouter dans le fichier httpd.conf situé dans le répertoire conf d'Apache (ajuster les valeurs en rouge)
Paramétrage en mode AJP (Tomcat) :
Ajouter dans le fichier httpd.conf situé dans le répertoire conf d'Apache (ajuster les valeurs en rouge)
Pré-requis :
Comment rediriger automatiquement une connexion http en https pour un virtual host précis:
Par exemple http://monDomaine.com --> https://monDomaine.com
RedirectPermanent /login "https://monDomaine.com/login"
Sous Apache, la réécriture d'URL et la redirection de ports est possible grâce au module "mod_rewrite".
Pour l'activer, rien de plus simple :
$ a2enmod rewrite
Les informations de réécriture sont à renseignées, soit dans le fichier de configuration d'Apache (/etc/apache2/apache2.conf), soit dans les fichiers de configuration des virtualhosts.
> RewriteEngine On
> RewriteRule ^/$ /ma_page [L,R]
> RewriteEngine On
> RewriteRule ^/mon_ancienne_page$ /ma_nouvelle_page [L,R]
> RewriteEngine On
> RewriteCond %{SERVER_PORT} ^8080$
> RewriteRule ^(.*) http://%{SERVER_NAME}:80/ [L,R]
> RewriteEngine On
> RewriteCond %{SERVER_PORT} ^8080$
> RewriteRule ^(.*)/mon_ancienne_page$ http://%{SERVER_NAME}:80/ma_nouvelle_page [L,R]
Tests réalisés sur une distribution Linux style Ubuntu
$ sudo apt-get install apache2-utils
$ ab -n 1000 -c 20 http://monserveur/index.html
Cela permet de faire des tests de charge sur votre serveur et de récupérer ses capacités en terme de nombre de requete / seconde.
Voici un exemple de configuration permettant d'avoir un frontend Apache ou Nginx, un backend Tomcat (ou autre) et le tout avec une connexion sécurisée SSL.
Un frontend Apache ou Nginx en mode proxy avec un backend Tomcat, rien de plus commun, une simple configuration comme celle-ci suffit à obtenir le résultat souhaité dans la conf virtualhost d'Apache ou de Nginx.
Pour Apache:
<VirtualHost *:80> ServerName mondomaine.fr ... ProxyPass / http://localhost:8080 ProxyPassReverse / http://localhost:8080 ... </VirtualHost>
Pour Nginx:
server { server_name mondomaine.fr; listen 80; location / { include proxy_params; proxy_pass http://localhost:8080; } }
Pour la connexion SSL, une modification doit être faite dans la configuration server.xml du Tomcat.
Il est nécessaire de définir un nouveau connector pour la connexion sécurisée.
<Connector connectionTimeout="20000" port="6443" protocol="HTTP/1.1" scheme="https" secure="true" proxyPort="443" proxyName="mondomaine.fr" />
Il faut définir un port d'écoute (6443), le "scheme" https, la valeur true à la propriété "secure", le port du serveur proxy (dans la conf apache / nginx) et enfin le nom du domaine associé (dans la conf apache / nginx).
Pour terminer, la conf à faire dans le virtualhost apache / nginx
Pour apache:
<VirtualHost *:443> ServerName mondomaine.fr ... SSLEngine on SSLCertificateFile "C:\Certbot\live\mondomaine.fr\fullchain.pem" SSLCertificateKeyFile "C:\Certbot\live\mondomaine.fr\privkey.pem" ... ProxyPass / http://localhost:6443 ProxyPassReverse / http://localhost:6443 ... </VirtualHost>
Pour nginx:
server { server_name mondomaine.fr; location / { include proxy_params; proxy_pass http://localhost:6443; } listen 443 ssl; ssl_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mondomaine.fr/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; }
Attention, la configuration du serveur proxy s'effectue bien en HTTP, mais sur le port 6443.
Seule la connexion au frontend est sécurisée (avec le monde extérieur).
Celle entre le frontend et le backend n'a pas besoin de l'être puisqu'ils sont sur le même serveur.