...
Par défaut, nginx n'a pas de cache de TLS session tickets. Il faut l'activer avec ssl_session_cache.
Sticky sessions avec nginx open source
| Bloc de code |
|---|
upstream prefer_server1 {
server server1:8080;
server server2:8080 backup;
}
upstream prefer_server2 {
server server1:8080 backup;
server server2:8080;
}
...
set $prefered_backend server2;
if ($cookie_JSESSIONID ~ "[.](server1|server2)$") { set $prefered_backend $1; }
proxy_pass http://prefer_$prefered_backend;
include proxy_params; |
Envoyer une requête à tous les backends
Si vous utilisez l'affinité de session pour choisir le backend, deux pbs peuvent se poser :
- CAS Single Logout back-channel : le serveur CAS fait une requête directement au serveur, sans passer par le navigateur. Il n'envoie donc pas de cookie de session qui permettrait de savoir quel backend choisir
- proxy CAS : le serveur CAS envoie le PGT directement à l'application, sans passer par le navigateur. Il est souvent possible de configurer l'application pour fournir à CAS une URL directe, ne passant pas par le balancer.
| Bloc de code |
|---|
upstream prefer_server1 {
server server1:8080;
server server2:8080 backup;
}
upstream prefer_server2 {
server server1:8080 backup;
server server2:8080;
}
server {
...
set $prefered_backend server3;
set $fallback_backend server2;
...
error_page 418 = @broadcast;
set $need_broadcast 0;
if ($remote_addr = 192.1.2.3) { set $need_broadcast 1; }
if ($need_broadcast) { return 418; }
...
location @broadcast {
mirror /@mirror_to_fallback;
mirror_request_body on; # for CAS back-channel Single-Logout
proxy_pass http://${prefered_backend}.univ.fr:8080;
include proxy_params;
}
location /@mirror_to_fallback {
proxy_pass http://${fallback_backend}.univ.fr:8080$request_uri;
include proxy_params;
proxy_set_header User-Agent "Duplicated-$http_user_agent";
}
} |
Shibboleth-SP
Shibboleth-SP fournit un FastCGI authorizer. Nginx ne gère pas cela en standard.
...