Articles plus anciens

Après avoir installé NGINX il convient de le configurer, paramétrer, sécuriser, optimiser.

Pour l’instant j’utilise NGINX uniquement pour servir du contenu privé protégé par mot de passe, je n’ai donc que peu accentué mon paramétrage sur la sécurité.

 

Paramétrage du nombre de process

Dans son article Seagate DockStar : 1er mois d’exploitation Vincent Rabah indique qu’il a paramétré son Dockstar qui héberge son blog avec 3 workers process nginx et 5 cgi children process.

Par contre dans l’article nginx: configuration complète | Shtark.fr il est conseillé de ne pas dépasser 2 pour les worker process.

J’ai pour ma part choisi peu de process car de toute façon mon serveur NGINX sera peu sollicité car utilisé que par un nombre restreint d’utilisateurs :

  • 2 workers process nginx (paramétré dans /etc/nginx/nginx.conf)
  • 2 cgi children process (paramétré dans /etc/init.d/php5-fcgi)

 

Compression gzip

Sous apache il s’agit du module deflate sous NGINX il s’appelle  HTTP gzip.

La configuration se fait dans /etc/nginx/nginx.conf :

gzip            on;
# désactivation de la compression pour les navigateur ne la prenant pas en charge (IE < 6)
gzip_disable    "MSIE [1-6].(?!.*SV1)";
gzip_vary       on;
gzip_comp_level 3;
gzip_proxied    any;
gzip_buffers    16 8k;
gzip_types text/plain text/html text/css application/json  application/x-javascript text/xml application/xml application/xml+rss  text/javascript;

 

Pour le détail des différentes directive se reporter au manuel NGINX pour HttpGzipModule

 

La dernière directive (gzip_types) indique les types de fichiers servis par NGINX qui peuvent prétendre à la compression GZIP, c’est à dire tous les ficheirs de type texte pour lesquels la compression sera effective (il est inutile de compression une image jpeg qui est déjà compressée)

Cette directive est importante parce que par défaut seul le type mime text/html est paramétré (pas les css ni les js).

 

Le réglage peut se faire sur la directive gzip_comp_level qui permet de régler le taux de compression (entre 1 et 9), trop faible la compression ne sera pas très importante et trop élevé elle consommera des ressource lors de l’envoi des données

On peut connaitre le taux de compression via le site http://www.whatsmyip.org/http_compression/qui outre le fait d’indiquer si votre navigateur réclame du contenu compressé :

Indique le taux de compression pour une page donnée :

 

Mise en cache client des ressources statiques

Il s’agit d’une directive indiquant au navigateur du client de mettre en cache les ressources statique que l’on défini (fichiers images, js, etc.).

Ainsi si l’utilisateur retourne une nouvelle fois sur la page/site le navigateur affichera la ressources statique qu’il a en cache au lei de la redemander au serveur Web.

Mon installation à partir du script de Nicolargo, positionne la directive expires dans le default-site pour les ressources statiques :

location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {
	expires 	30d;
	access_log	off;
}

Le gain est très important et peu être visible avec le site http://www.webpagetest.org/ qui permet d’analyser le temps de chargement d’une page.

Le site réalise 2 chargements successifs de la même page et le gain est flagrant (test fait sur une page contenant beaucoup d’images) :

Document Complete Fully Loaded
Load Time First Byte Start Render Time Requests Bytes In Time Requests Bytes In
First View 25.426s 5.912s 6.745s 25.426s 167 1,066 KB 25.426s 167 1,066 KB
Repeat View 7.241s 5.963s 6.081s 7.241s 1 7 KB 7.241s 1 7 KB

 

Modification de la signature du serveur

Dans les en-têtes HTTP et les pages d’erreur NGINX indique son nom et la version utilisée:

Cela facilite le travail des pirates qui peuvent cibler les serveurs/versions présentant une faille de sécurité.

La signature du serveur sera donc réduite à “nginx” avec la directive server_tokens à off :

Fichiers de log

Afin de surveiller plus précisément les accès aux différents service privés que mon Dockstar héberge j’ai choisi de faire un fichier de log d’accès par service/répertoire/location.

J’ai donc une ligne access_log dans chacun de mes blocs location :

location images/ {
	...
	access_log	/var/log/nginx/images.access.log;
	...
}

Je n’ai pas personnalisé le format des logs par défaut (nommé combined) avec la directive log_format.

Ce format le voici :

log_format combined '$remote_addr - $remote_user [$time_local]  '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Ce qui donne par exemple :

192.168.1.254 - user [11/Apr/2011:21:56:29 +0200] "GET /test/phpinfo.php HTTP/1.1" 200 9766 "http://www.monDomaine.fr/test/" "Mozilla/5.0 (X11; Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0"

 

Pour finir avec les logs à noter qu’il est possible de spécifier sur les logs d’erreur le niveau de détail avec la directive error_log :

error_log  /logs/nginx_error.log  warn;

 

Le niveaux sont debug | info | notice | warn | error | crit | alert | emerg | off

Par défaut le niveau est warn.

 

Divers

Favicon et 404

Lorsque l’on a pas de Favicon sur son site NGINX log régulièrement des Erreurs HTTP 404

Pour y remédier il suffit d’ajouter ceci dans sa configuration :

location = /favicon.ico {
 access_log       off;
 return   204;
 }

A voir : Boost your nginx web server performance by rewriting favicon.ico requests correctly

 

Configurations communes

Pour mutualiser divers éléments de configuration sur les différents site hébergé par mon serveur NGINX, j’ai créé un fichier /etc/nginx/common.conf contenant ces configurations.

# Sécurité : les fichiers en .ht sont interdits d'accès
 location ~ /\.ht {
 deny  all;
 }
 
# Erreur 404 sur Favicon
 location = /favicon.ico {
 access_log       off;
 return   204;
 }
 
# Mise ne cache des ressources statiques
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {
 expires         30d;
 access_log      off;
 }

 

Il me suffit ensuite d’inclure ce fichier dans la configuration de chacun de mes sites :

include /etc/nginx/common.conf;

 

Redirection sous domaine

Pour faire une redirection d’un sous-répertoire du domaine parent vers son propre sous-domaine voici la configuration utilisée.

Par exemple pour rediriger http://www.mondomaine.fr/application vers http://application.mondomaine.fr :

location /application {
 rewrite ^/application/?(.*) $scheme://application.mondomaine.fr/$1 permanent;
 }

 

Autres paramétrages pas encore effectués

(et peut être jamais effectués sur le Dockstar)

 

 

Sur mon Firefox 4 la correction orthographique des zones de texte se faisait toujours en anglais et ce malgré la localisation Française de mon Firefox et l’installation des dictionnaires Français :

Je devais alors choisir la langue de correction orthographique (clic droits dans la zone, Langues > Fançais /France)

Le problème c’est que cette manipulation n’était pas sauvegardée, j’étais obligé de la refaire à chaque démarrage de Firefox.

Pour corriger ce problème je me suis rendu sur la page de configuration de Firefox, pour cela saisir about:config dans la barre d’adresse et accepter l’avertissement de sécurité.

Filtrer les paramètres avec le mot-clé « spell », dans mon cas voici les paramètres correspondants au filtre :

Les lignes en gras indiquent les paramètres modifiées par rapport aux valeur par défaut.

J’ai ré-initialisé le paramètre spellchecking.dictionnary (ne me demandez pas pourquoi celle-ci) à sa valeur par défaut, pour cela clic droit sur la ligne, réinitialiser.

Le paramètre à alors pris la valeur »fr »

J’ai ensuite choisi la langue de correction orthographique « Fançais /France », clic droits dans une zone de texte, Langues > Fançais /France (cf. copie écran ci-dessus)

Les paramètres contenant « spell » avaient alors ces valeurs :

Et miracle au démarrage suivant de Firefox la langue de correction orthographique était encore le Français.

 

Rque : il doit être possible de corriger ce problème en éditant le fichier prefs.js présent dans son profil. En effet avant mes manipulations décrites ci-dessus il contenait les 2 lignes suivantes :

user_pref("spellchecker.dictionary", "en_US");
user_pref("spellchecking.dictionary", "fr_FR");

Et plus qu’une avec une valeur différente après les modifications :

user_pref("spellchecker.dictionary", "fr_FR");

Voici quelques marques-page sur le « nouveau » framework javascript qui va/fait parler de lui depuis peu (enfin presque) : node.js

Je ne compte pas faire une revue exhaustive de la littérature sur le sujet et je ne sais même pas si j’utiliserais node.js un jour, mais je ne veux pas laisser pourrir ces marques pages dans mon Firefox et je ne sais pas où les mettre ailleurs…

09 mai 11

Par défaut la nouvelle version de Dropbox n’est pas poussée sur Ubuntu (au moins le 10.10), il est cependant facile de faire la mise à jour.

Pas besoin d’installer Dropbox depuis le source, il suffit d’arrêter le service Dropbox (clic droit sur l’icône dans la barre des taches et « Stop dropbox »), renommer le fichier .dropbox-dist sous votre home et redémarrer Dropbox (Applications > Internet > Dropbox).

En ligne de commande :

dropbox stop
mv ~/.dropbox-dist ~/.dropbox-dist.OLD
dropbox start

La nouvelle version sera téléchargée et installée.

Bonus pour installer les icônes monochrome plus intégrées au bureau Ubuntu, un paquet est disponible

Source : What’s New in Dropbox 1.0 for Ubuntu

Commentaires fermés

Une des première application de mon serveur Web NGINX à été de mettre en œuvre un serveur de synchronisation pour Firefox.

Cette fonctionnalité de synchronisation est nommée Firefox Sync (ex Weave), elle est intégrée par défaut dans Firefox 4 (pour les version antérieure il faut passer par une extension).

« Firefox Sync » est un service qui vous permet de synchroniser vos marque-pages, votre historique, vos mots de passe et vos onglets ouverts avec une autre copie de Firefox – comme, par exemple, avec une sur un autre ordinateur ou sur un terminal mobile – source

 

Xmarks Sync vs Firefox Sync

Pour remplir ce rôle jusqu’alors j’utilisais l’extension Xmarks Sync, mais ces dernier temps la synchronisation se faisait de plus en plus longue, voir n’aboutissait pas pour les mots de passe.

De plus pourquoi ajouter une extension ralentissant potentiellement Firefox alors que ce dernier embarque désormais la fonctionnalité.

Autres différences (non exhaustif) :

  1. Firefox Sync est libre et soutenu par la foncdation Mozilla, Xmarks est une société commerciale, le service à failli disparaitre (Xmarks is Dead. Long Live Xmarks?) avant son acquisition par Lastpass
  2. Firefox Sync crypte les mots de passe avant d’envoyer les données vers le serveur alors que Xmark fait l’inverse
  3. Firefox Sync synchronise les marques-page, l’historique, les préférences, les onglets ouverts et les mots de passe, Xmarks ne synchronise pas les préférences
  4. Xmarks est multi-navigateur, Firefox Sync n’est que pour Firefox
  5. Xmarks propose une interface de consultation des ses bookmarks via le web, Firefox Sync non
  6. Xmarks sauvegarde l’historique des bookmark il est ainsi possible de revenir en arrière si on a supprimé par mégarde des marques-page, Firefox Sync je ne penses pas
  7. Xmarks gère des notion de profil permettant par exemple de ne synchroniser qu’une partie des ses marques pages (au boulot par exemple), Firefox Sync non
  8. Xmarks à une notion de partage de bookmark, Firefox Sync non
  9. Xmarks modifie la page des résultats Google pour ajouter une prévisualisation et un système de notation
  10. Xmarks est plus paramétrable et plus « loquace » sur ce qu’il fait
  11. Xmarks et Firefox Sync permettent l’utilisation de son propre serveur, en HTTP(s) pour Firefox Sync, contre FTP(s) ou WebDav sur HTTP(s) pour Xmarks

Bref Xmarks possède nombre d’options en plus mais Firefox Sync est plus libre….

Toutes les informations (spécifications / API / Sources)  concernant le serveur Sync sont disponibles sur la page Firefox Sync du Wiki Mozilla

 

Installation Firefox Sync

Sync nécessite une plateforme LAMP ce qui n’est pas pour me plaire car je souhaite autant que possible me passer de MySQL et n’est pas forcément aisé à mettre en œuvre (cf. les sources) mais il existe une version light du serveur Sync.

Le serveur Firefox Sync minimal nécessite un serveur Web avec support du php (NGINX sur mon Dockstar) et SQLite.

Créer un répertoire dans votre arborescence web et donner les droits à l’utilisateur sous lequel votre serveur Web tourne (le plus souvent www-data) :

drwxrwxr-x  2 www-data www-data 4,0K 25/03/2011 20:54 weave/

Récupérer la dernière archive des scripts du serveur Firefox Sync minimal : http://people.mozilla.org/~telliott/

Décompresser cette archive dans le dossier précédemment créé.

 

Paramétrer votre serveur Web pour rendre accessible le répertoire et le documentation (fichier README) indique qu’il faut créer un alias du type :

Alias /weave /<chemin vers weave>/index.php

Ce qui sous NGINX se traduit ainsi :

location /weave {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root/weave/index.php;
    fastcgi_param   SCRIPT_NAME $document_root/weave/index.php;
    if ( $request_uri ~ "/weave/([^?]*)" ) {
        set $path_info  /$1;
     }
    fastcgi_param   PATH_INFO       $path_info;
 }

Il faut ensuite aller à l’adresse suivante :

http://[adresse de votre serveur]/weave/1.0/blah/info/collection

Une authentification vous est réclamé :

Saisir :

  • Utilisateur : blah
  • Mot de passe : n’importe quoi

Dans le répertoire contenant les scripts php, une base SQLite doit avoir été créée :

-rw-r--r-- 1 www-data www-data 5,4M 25/03/2011 20:54 weave_db

On peut considérer Firefox Sync installé.

 

Configuration du/des utilisateur(s)

La version minimale du serveur Firefox Sync ne possède pas d’interface pour gérer les utilisateurs, il faut les créer « à la main » sur le serveur, ce qui offre l’avantage de ne pas avoir de risque de voir son serveur Sync sqatté…

La création d’un utilisateur se fait avec le script php create_user que l’on lance en ligne de commande.

Il faut pour cela avoir installé le paquet php5-cli.

Puis on lance le script et on répond aux question

$ sudo php create_user
(c)reate, (d)elete or change (p)assword: c
Please enter email: aa
Please enter password: aa
aa created

A noter qu’il n’est pas nécessaire de saisir un email comme indiqué mais le login souhaité

Et voila…

 

Configuration de Firefox 4

Dans Firefox 4 aller dans le bouton Firefox et sélectionner « Configurer sync… »

Sélectionner « J’ai déjà un compte sync, se connecter » :

 

Sélectionner « Je n’ai pas l’appareil avec moi »

2 cas de figure se présentent dès lors :

 

1ère configuration de Firefox

C’est le premier Firefox que vous configurez avec le compte utilisateur, le serveur Firefox Sync ne contient donc aucunes données.

Saisir votre login et mot de passe choisis lors de la création de l’utilisateur.

Dans la liste déroulante « Serveur » choisir « Utiliser un serveur personnalisé », puis saisir l’URL d’accès à Firefox Sync sur votre serveur.

Saisir une clé au hasard , elle ne sera pas prise en compte et Firefox en générera une autre.

Firefox détecte que c’est votre première configuration, il génère une nouvelle clé (que vous pouvez re-générer) :

Noter cette clé, ou l’enregistrer dans une endroit sûr, elle vous sera nécessaire pour configurer les autres Firefox que vous souhaiter synchroniser.

Cliquer sur « Modifier la clé de synchronisation ».


Cette alerte vous avertit que les données des autres appareils synchronisés avec le compte utilisateur choisi seront écrasées avec les données du Firefox en-cours de configuration.

Ce n’est pas grave puisque nous configurons le premier Firefox à synchroniser.

Cliquer sur Terminer :

Vous pouvez alors choisir les options de synchronisation en cliquant sur le bouton du même nom.

Choisir quelle données synchroniser et le mode de première synchronisation, dans mon cas mon Firefox contenant déjà tous mes Bookmark et rien sur le serveur j’ai choisi de remplacer les données du serveur par celle de mon Firefox.

 

Configuration des Firefox suivants

Vous avez déjà au moins un Firefox de paramétré, synchronisé, le serveur contient donc déjà des données pour l’utilisateur choisi et vous souhaitez en ajouter un autre.

Comme précédemment saisir votre login et mot de passe de l’utilisateur choisi, l’URL de votre serveur de synchronisation.

Saisir la clé générée lors de la configuration du 1er Firefox

Cliquer sur Suivant, Firefox vérifie le login/mdp et la clé saisie.

La configuration est terminée, de même qu’auparavant choisir les options de synchronisation.

Par contre contrairement à au paragraphe précédent (et à la copie d’écran), il faut choisir soit :

  • de remplacer les donnée de ce Firefox par celle du serveur, si vous n’avez pas de bookmark sur l’ordinateur en cours
  • de fusionner les données du serveur avec celle de l’ordinateur en cours de paramétrage

 

Rque : les options de paramétrage sont ensuite modifiables dans les options Firefox :

A noter que le menu Gestion du compte > modifier le mot de passe ne fonctionne pas avec la version minimal du serveur Firefox Sync.

 

Sécurisation HTTPS

Pour plus de sécurité il est conseillé de mettre en œuvre une connexion HTTPs, le flux HTTP est alors crypté avant d’être envoyé sur le réseau (internet).

Pour créer une connexion HTTPs avec NGINx je vais prochainement publier un article.

Une chose à savoir si vous utilisez un certificat auto-signé sur votre serveur Web (90% des cas, non ?), il vous faudra aller sur l’adresse de Firefox Sync sur votre serveur avec Firefox, et accepter l’alerte de sécurité avant de paramétrer Firefox Sync sur ce même Firefox.

Sources :

Installation d’un serveur complet :

Installation d’un serveur Weave

Install & Setup a custom Firefox Sync/Weave server

Installation d’un serveur minimal :

Weave Minimal Server « Tapestry

Installation d’un serveur Firefox sync | Gege2061′s blog

Serveur Firefox Sync et NGINX :

More alternate server possibilities « Tapestry

Got Mozilla Weave working with Nginx — Hasse’s technical ramblings

► Installer son propre serveur Firefox sync avec PHP-FPM et Nginx ◄ – Jean Baptiste Favre