Pages enfant
  • nginx

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Par défaut seul le contenu text/html est compressé. Il est conseillé d'ajouter des gzip_types comme fait par défaut sur les apache sous debian.

Il faut aussi s'assurer que gzip on est activé (c'est le cas sur debian, mais pas sur CentOS)

headers avec des "_"

Par défaut, les headers avec des "_" sont bloqués. Pour les autoriser, utiliser underscores_in_headers.

(exemple : nécessaire si l'on veut autoriser "REMOTE_USER")

Monitoring

WebSocket

Il faut s'assurer de passer les headers "Upgrade" et "Connection" de la 1ère requête WebSocket (le handshake).

Nginx va ensuite détecter la réponse d'Upgrade vers WebSocket et établir un tunnel.

Tout est clairement documenté upstream : https://nginx.org/en/docs/http/websocket.html

Monitoring

Par défaut le monitoring nginx est Par défaut le monitoring nginx est très limité : module stub_status. Ce module est utilisé par /usr/local/bin/monitor-nginx .

...

Solution possible : "error_page 405 =200 $uri;"

Techniques de proxification

Modifier un response header

  • Pour forcer une valeur :

proxy_hide_header Content-Security-Policy;
add_header Content-Security-Policy "xxx";

  • Pour ajouter une valeur

proxy_hide_header Content-Security-Policy;
add_header Content-Security-Policy "$upstream_http_content_security_policy; xxx";

  • Pour modifier une valeur

# NB: doit être fait en scope global ("http")
map $upstream_http_content_security_policy $content_security_policy_allow_bandeau {
    '~(.*); script-src (.*)' "$1; script-src ent.univ.fr $2";
    '~(.*)' "$1; script-src ent.univ.fr";
}

proxy_hide_header Content-Security-Policy;
add_header Content-Security-Policy $content_security_policy_allow_bandeau;


Proxifier un backend avec SNI

Bloc de code
proxy_pass https://foo.bar;
proxy_ssl_verify on;
proxy_ssl_verify_depth 1;
# le SNI est utilisé par le backend
proxy_ssl_name xxx.univ.fr; 
proxy_ssl_server_name on;

Mais attention si on a besoin d'un deuxième SNI vers le même serveur backend, exemple :

Bloc de code
proxy_pass https://foo.bar;
proxy_ssl_name xxx2.univ.fr; 

=> cela ne fonctionnera pas à cause "proxy_ssl_session_reuse".

Une solution est "proxy_ssl_session_reuse off".

Une autre solution est d'utilisateur un upstream :

Bloc de code
# NB: pour proxy_pass https://xxx.univ.fr, il semble que nginx utilise "xxx.univ.fr" comme clé pour la fonctionnalité proxy_ssl_session_reuse
# En utilisant un upstream, on peut forcer une clé différente pour un même backend
upstream upstream_xxx2 {
    server foo.bar:443;
}
server {
   ...
   proxy_pass https://upstream_xxx2;
   proxy_ssl_name xxx2.univ.fr; 
}

Sticky sessions avec nginx open source

...