Mise en place du module pagespeed

Préparation

  • Installer le paquet nginx-extra
  • Créer le dossier /var/ngx_pagespeed_cache pour y monter un tmpfs, 256Mo sont suffisant pour une instance Wordpress
mkdir /var/ngx_pagespeed_cache
echo 'tmpfs /var/ngx_pagespeed_cache tmpfs defaults,size=256M 0 0' >> /etc/fstab
mount -a

Configuration pour votre “server”

# enable ngx_pagespeed
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
        add_header "" "";
}
location ~ "^/ngx_pagespeed_/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }

pagespeed RewriteLevel CoreFilters;
pagespeed ModifyCachingHeaders off;
pagespeed EnableFilters canonicalize_javascript_libraries;
pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters combine_css;
pagespeed EnableFilters combine_heads;
pagespeed EnableFilters combine_javascript;
pagespeed EnableFilters elide_attributes;
pagespeed EnableFilters extend_cache;
pagespeed EnableFilters flatten_css_imports;
pagespeed EnableFilters insert_dns_prefetch;
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters make_google_analytics_async;
pagespeed EnableFilters remove_comments;
pagespeed EnableFilters rewrite_css,sprite_images;
pagespeed EnableFilters rewrite_images;
pagespeed EnableFilters rewrite_javascript;

Et voila, vous pouvez relancer nginx et regarder votre score https://developers.google.com/speed/pagespeed/insights/ 🙂

[Lire]

Nginx – Ajouter/Supprimer les www pour tous ces domaines

Pour ajouter les www. a tous ces domaines

server {
    listen 80;
    server_name ~^(?!www\.)(?<domain>.+)$;
    return 301 $scheme://www.$domain$request_uri;
}

Au contraire, pour les supprimer

server {
    listen 80;
    server_name ~^(?www\.)(?<domain>.+)$;
    return 301 $scheme://$domain$request_uri;
}

Monitorer Nginx avec Zabbix

Configuration de Nginx

Le serveur nginx doit donner sont status en local via l’url http://localhost:61123/nginx_status

Pour cela, il faut ajouter le " server " suivant qui sera disponible uniquement via localhost sur le port 61123:

server {
        listen       127.0.0.1:61123;
        server_name  localhost;
        location /nginx_status {
                stub_status on;
                access_log   off;
                allow 127.0.0.1;
                deny all;
        }
}

Configuration de l’agent Zabbix

Dans la configuration de l’agent Zabbix ajouter les paramètres suivant pour remonter au serveur les nouvelles clefs

[Lire]

Offloading SSL avec Nginx

Configuration de base pour effectuer de l’offloading SSL avec Nginx.

Les header défini avec proxy_set_header pourront être utilisé au niveau du backend pour effectuer, par exemple, des redirection http vers https

server {
  listen   443 ssl; ## listen for ipv4
  server_name domaine.ltd;
  ssl                     on;
  ssl_prefer_server_ciphers on;
  ssl_protocols           SSLv3 TLSv1 TLSv1.1 TLSv1.2; #libssl > 1.0
  ssl_ciphers             RC4:HIGH:!MD5:!ADH:+DH; #HIGH:!ADH:!MD5:@STRENGTH;
  ssl_session_cache       shared:TLSSL:16m;
  ssl_session_timeout     10m;
  ssl_certificate         /etc/nginx/domaine.ltd.crt;
  ssl_certificate_key     /etc/nginx/domaine.ltd.key;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-By $server_addr:$server_port;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://backend;
  }

}

Article complémentaire : Redirection http vers https derrière un reverse proxy

[Lire]

Nginx - Serveur http haute performances

Nginx

Serveur http haute performances


Pourquoi Nginx ?

  • Rapidité pour délivrer le contenu
  • Utilise peut de ressource système
  • Gestion de cache
    • Clientes
    • Serveur

Ressources

Utilisation de la mémoire

Utilisation de la mémoire


Les processus

Les processus

  • 1 processus père
    • X worker (sous process)
      • X connections par worker

Requêtes par secondes

Requêtes simultanée

Requêtes par secondes


Nginx / PHP ( ≥ 5.3 )

Fonctionnement

  1. GET /index.php
  2. Nginx transmet la requête a PHP
  3. Nginx transmet le résultat au client

Memcached

  • Les temps de traitement sont divisé par quatre
    • 850 req/s sans Memcached, 3550 avec
  • Configuration simple
  • Fonctionnement :

Temps de traitement vs. Apache

[Lire]

Centralisation des logs Nginx avec Rsyslog

Configuration de rsyslog coté nginx

Créer le fichier de configuration /etc/rsyslog.d/nginx.conf pour y placer

$ModLoad imfile

$InputFileName          /var/log/nginx/access.log
$InputFileTag           nginx_access_log:
$InputFileStateFile     nginx_access_log
$InputFileSeverity      info
$InputFileFacility      user
$InputRunFileMonitor

$InputFileName          /var/log/nginx/error.log
$InputFileTag           nginx_error_log:
$InputFileStateFile     nginx_error_log
$InputFileSeverity      info
$InputFileFacility      user
$InputRunFileMonitor

# lit le fichier de log toutes les deux secondes
$InputFilePollingInterval 2

#envoie les logs en tcp a 192.1.2.3 port 514
if $syslogtag == 'nginx_access_log:' then @@(z9)192.1.2.3:514
if $syslogtag == 'nginx_error_log:' then @@(z9)192.1.2.3:514

#ne log pas ce qui est tagué nginx (pour ne pas logger en double)
:syslogtag, contains, "nginx" ~

Configuration de rsyslog coté serveur de log

Créer de la même manière le fichier /etc/rsyslog.d/nginx.conf pour y insérer :

[Lire]

Conserver l'IP du client derrière un reverse proxy

Lorsque Nginx est placé derrière un reverse proxy, celui ci avec une configuration de base logera L’IP des visiteur avec celle du reverse proxy et non avec L’IP des visiteurs.

Cela peut poser des problèmes par exemple dans le cas ou vous utilisez Akismet comme anti-spam pour vos commentaires.

Pour cela, dans varnish ajouter après

sub vcl_recv {

la ligne

set req.http.X-Forwarded-For = client.ip;

puis dans la configuration Nginx, dans la configuration http, ajouter

[Lire]