Apache

Logo Apache

Invalid command 'php_flag'

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

Load Balancing

Effectuer du load balancing avec les modules proxy, proxy_balancer et proxy_ajp d'Apache2

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)

<Proxy balancer://mycluster>
BalancerMember http://adresseIpDuServeur1 min=10 max=500 timeout=60 loadfactor=1
BalancerMember http://adresseIpDuServeur2 min=10 max=500 timeout=60 loadfactor=1
</Proxy>
 
ProxyPreserveHost On
ProxyRequests Off
ProxyPass /monAdresse balancer://mycluster stickysession=JSESSIONID scolonpathdelim=On
ProxyPassReverse /monAdresse balancer://mycluster stickysession=JSESSIONID scolonpathdelim=On
 

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)

ProxyPass /monAdresse balancer://mycluster stickysession=JSESSIONID scolonpathdelim=On
<Proxy balancer://mycluster>
BalancerMember ajp://adresseIpDuServeur1:8009/ min=10 max=500 timeout=60 route=node1 loadfactor=1
BalancerMember ajp://adresseIpDuServeur1:8009/ min=10 max=500 timeout=60 route=node2 loadfactor=1
Order deny,allow
Allow from all
</Proxy>
 
Modifier les fichiers serveur.xml situé dans les répertoires conf de Tomcat (sur tous les serveurs à utiliser)
Décommenter la ligne :
<Connector maxThreads="400" port="8009" protocol="AJP/1.3" redirectPort="8443" />
Décommenter et modifier la ligne (incrémenter la valeur du node pour chaque serveur) :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="noden">
 
Pour finir, redémarrer tous les serveurs Tomcat et le serveur Apache pour prendre en compte les modifications.

Redirection automatique http vers https

Pré-requis :

  1. Activer le mod_ssl sur Apache
  2. Générer un certificat SSL
  3. Avoir son site accessible aussi bien en http qu'en https

Comment rediriger automatiquement une connexion http en https pour un virtual host précis:

Par exemple http://monDomaine.com --> https://monDomaine.com

  1. Editer le fichier de configuration du virtual host (/etc/apache2/sites-enabled/monDomaine.com.conf)
  2. Ajouter les informations suivantes indiquées en rouge
    <VirtualHost *:80>
    ServerName monDomaine.com
    CustomLog /var/log/apache2/toto-access.log combined
    ErrorLog /var/log/apache2/toto-error.log
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteLog /var/log/apache2/https_rewrite.log
    RewriteLogLevel 1
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
    </IfModule>
    </VirtualHost>
  3. Redémarrer Apache (/etc/init.d/apache2 restart)
 
Pour rediriger une page bien précise :
 
 
Préciser à la fin du fichier de configuration du virtual host l'information suivante
 

RedirectPermanent /login "https://monDomaine.com/login"

 

Réécriture d'URL et redirection de ports Apache

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.

Réécitrure d'URL

  • Pour réécrire / en /ma_page

> RewriteEngine On
> RewriteRule ^/$ /ma_page [L,R]

  • Pour réécrire /mon_ancienne_page en /ma_nouvelle_page

> RewriteEngine On
> RewriteRule ^/mon_ancienne_page$ /ma_nouvelle_page [L,R]

Redirection de ports

  • Pour rediriger toutes les requêtes du port 8080 vers le port 80

> RewriteEngine On
> RewriteCond  %{SERVER_PORT} ^8080$
> RewriteRule ^(.*) http://%{SERVER_NAME}:80/ [L,R]

  • Pour rediriger 'http://mon_site:8080/mon_ancienne_page' vers 'http://mon_site/ma_nouvelle_page'

> RewriteEngine On
> RewriteCond  %{SERVER_PORT} ^8080$
> RewriteRule ^(.*)/mon_ancienne_page$ http://%{SERVER_NAME}:80/ma_nouvelle_page [L,R]

Etiquettes: 

Tester les capacités d'un serveur web

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

  • -n = nombre de requetes
  • -c = nombre de requetes en parallèle (cad envoyé au meme moment)

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.

Etiquettes: 

Tomcat + Apache + SSL

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.