Outils pour utilisateurs

Outils du site


serveurs:nginx:faq

Comment réaliser une authentification HTTP basique ?

auth_basic "Espace restreint";
auth_basic_user_file /path/to/.htpasswd;

nginx reprend une partie des formats d'Apache, vous pouvez donc, pour ces formats communs (détaillés ci-dessous), employer l'utilitaire htpasswd fournit avec Apache pour générer vos fichiers de comptes.

Méthodes de hashage commune à Apache :

  • le MD5 modifié d'Apache (option -m de htpasswd, préfixé par $apr1$)
  • le SHA1 non salé (-s ; déconseillé, préfixé de {SHA})
  • la méthode crypt (-d ; indisponible sous Windows, pas de préfixe)

Différences avec Apache :

  • nginx permet du SHA1 salé (préfixé {SSHA})
  • nginx supporte les mots de passe en clair (déconseillé) mais ils doivent être préfixés de {PLAIN}
  • nginx ne prend pas (encore ?) en charge bcrypt

Comment rediriger son domaine ...

... sans www => avec ?

server {
    server_name domaine.ext;
    return 301 $scheme://www.$server_name$request_uri;
}

... pour forcer https

server {
    server_name x.y.z;
    # remplacer $server_name par $host si le même bloc server gère en fait plusieurs VH
    return 301 https://$server_name$request_uri;
}

Supprimer un cookie

add_header Set-Cookie "NomDuCookieASupprimer=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/";

Les attributs chemin (path), httponly (ajouter ; httponly à fin de la chaîne ci-dessus), domain (; domain=x.y.z) et secure (; secure) doivent être repris si la valeur ne correspond pas à celle par défaut.

Nginx et proxy

Comment faire suivre le protocole initial (http vs https) au backend ?

Faites suivre l'information en insérant une entête HTTP (appelée X-Forwarded-Proto ici) qui reprend le protocole (http ou https) d'origine de la requête.

proxy_set_header X-Forwarded-Proto $scheme;

Ainsi, vous devriez la retrouver ensuite :

  • pour PHP, sous la variable $_SERVER['HTTP_X_FORWARDED_PROTO']
  • pour Apache, la variable de réécriture %{HTTP:X_FORWARDED_PROTO}

Comment faire travailler nginx sur l'adresse IP réelle du client et non celle du proxy quand nginx est derrière un mandataire ?

Nécessite le module ngx_http_realip_module.

set_real_ip_from A.B.C.D;
real_ip_header X-Forwarded-For;

# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

A.B.C.D est à remplacer par la ou les adresses (éventuellement via la notation CIDR) IP "interne" du mandataire en amont (127.0.0.1 s'ils sont tous deux sur le même hôte).

serveurs/nginx/faq.txt · Dernière modification: 01/04/2016 19:40 de julp