Project

General

Profile

Scénario #30019

Essayer de corriger les warning nginx

Added by Joël Cuissinat 5 months ago. Updated 4 months ago.

Status:
Terminé (Sprint)
Priority:
Normal
Assigned To:
Category:
-
Start date:
05/11/2020
Due date:
05/22/2020
% Done:

100%

Story points:
4.0
Remaining (hours):
0.00 hour
Velocity based estimate:
Release:
Release relationship:
Auto

Description

Suite du scénario #29858

L'idée est de corriger au mieux les configurations Nginx en 2.7.2 et de préparer quelque chose de propre pour la 2.8.0 en se basant sur les analyses de Daniel ci-dessous.

Les tests unitaires remontent désormais la présence d'un warning nginx sur la plupart des configurations "aca" (sauf celles qui ont activer_apache à oui).
On peut les voir dans la section .. » 52 : Module tests de la page :

Peut être que certains sont acceptables et que certaines configurations sont impossibles mais cela fait beaucoup...

Toutes les combinaisons ne sont pas testées et les configurations "aca" peuvent être regroupées en 4 cas :
  1. eole-web + activer_apache à oui : scribe & thot
  2. eole-web + activer_apache à non : horus & seshat
  3. pas eole-web : eolebase, hapy, seth, sphynx, zephir
  4. eole-reverseproxy : amon
  • cas n°1 : test aca.thot + SSO local 443 (avec le warning concernant eolesso_adresse)
    • /genconfig : OK
    • /sso : OK (mais sans CSS)
    • nginx -t : OK
  • cas n°2 : test aca.seshat + SSO local 443 (avec le warning concernant eolesso_adresse)
    • /genconfig : KO (404 Not Found nginx)
    • /sso : OK
    • nginx -t : @[warn] conflicting server name "seshat.ac-test.fr" on 0.0.0.0:443, ignored@__
  • cas n°3 : test aca.sphynx + SSO local (avec le warning concernant eolesso_adresse)
    • /genconfig : OK
    • /sso : KO @(aca / La page que vous avez demandée est indisponible)@
    • nginx -t : @nginx: [warn] conflicting server name "sphynx.ac-test.fr" on 0.0.0.0:443, ignored@ (x2)
  • cas n°4 : test etb1.amon (SSO distant)
    • /genconfig : OK
    • /sso : OK (celui de etb1.scribe)
    • nginx -t : @[warn] conflicting server name "amon.etb1.lan" on 0.0.0.0:443, ignored@

Subtasks

Tâche #30087: S'assurer que seul les fichiers dans web.d sont générésFerméDaniel Dehennin

Tâche #30170: Supprimer le warning ajouté sur "eolesso_adresse"FerméJoël Cuissinat


Related issues

Related to eole-reverseproxy - Scénario #29858: Déplacer la variable "activer_nginx_web" dans un dictionnaire "commun" Partiellement Réalisé 04/14/2020 04/30/2020

Associated revisions

Revision 0a1a46a8 (diff)
Added by Daniel Dehennin 4 months ago

Nginx log file names conflict with GenConfig

Ref: #30283
Ref: #30019

History

#1 Updated by Joël Cuissinat 5 months ago

  • Description updated (diff)

#2 Updated by Matthieu Lamalle 5 months ago

C'est un problème que j'avais remonté, si l'adresse du sso est la même que celle de la machine, il y a un conflit de nom de serveur dans nginx.
C'est pour cela qu'on avait mis en warning.

#3 Updated by Daniel Dehennin 5 months ago

Résumé

C'est un problème que j'avais remonté, si l'adresse du sso est la même que celle de la machine, il y a un conflit de nom de serveur dans nginx.
C'est pour cela qu'on avait mis en warning.

C’est parcequ’il ne faut pas mettre plusieurs configuration dans /etc/nginx/sites-enabled/ qui déclarent les mêmes noms et port d’écoute :

server {
    listen 443;
    server_name bidule.example.fr;
}

C’est la raison de l’existence de /etc/nginx/web.d/.

Sinon, une fois le premier chargé, les autres sont ignorés.

Dans mon exploration j’ai trouvé :

  • que des fichiers de site sont générés dans /etc/nginx/sites-enabled/ au lieu de /etc/nginx/web.d/
  • que le fichier /etc/nginx/sites-enabled/genconfig.conf ne contenait aucune restriction d’accès par adresse IP contrairement à /etc/nginx/web.d/genconfig.conf
  • qu’il peut arriver que le fichier /etc/nginx/sites-enabled/default n’existe pas, c’est lui qui contient certains paramétrage indispensables (comme server_names_hash_bucket_size)

Question ouverte

En faisant le tour des configuration, j’ai bien vu que la configuration est devenue complexe (reverse proxy/nginx tout seul/nginx + apache), ne serait-il pas temps de prévoir, un jour, une refonte complète de la configuration nginx ?

  • La déclaration des serveurs et des ports
    • un seul fichier contient la déclaration du serveur _ default écoutant sur les ports 80 et 443 (/etc/nginx/sites-enabled/default ?)
    • un seul fichier contient la déclaration du serveur %%web_url écoutant sur les ports 80 et 443 (/etc/nginx/sites-enabled/web ?)
    • un seul fichier contient la déclaration du serveur %%nom_domaine_machine écoutant sur les ports 80 et 443 (/etc/nginx/sites-enabled/eole ?)
    • un fichier déclare le wpad (c’est déjà le cas /etc/nginx/sites-enabled/wpad)
    • un fichier déclare la redirection SSO sur le port 8443 (/etc/nginx/sites-enabled/eole-sso-reverse-proxy ?)
    • un fichier déclare la redirection EAD Scribe sur le port %%revprox_ead_port (/etc/nginx/sites-enabled/eole-ead-reverse-proxy ?)
    • un fichier déclare la redirection EOP sur le port 6080 (/etc/nginx/sites-enabled/eole-eop-reverse-proxy ?)
    • un fichier déclare les URLs d’erreur pour le proxy sur les ports 81, 82, 83 et 84 (/etc/nginx/sites-enabled/eole-proxy-errors ?)
    • un fichier déclare les reverses proxy pour les noms autres que %%web_url et %%nom_domaine_machine (/etc/nginx/sites-enabled/eole-reverse-proxy ?)
    • pour rétro-compatibilité : un fichier déclare le port 7000 (c’est déjà le cas /etc/nginx/sites-enabled/eoleflask.conf)
  • La déclaration des chemins pour %%web_url et %%nom_domaine_machine (peut-être faire des sous répertoires pour différencier les deux s’il y a besoin ?)
    • un répertoire déclare les chemins accessibles par le port 443 (c’est déjà le cas /etc/nginx/web.d/, peut-être le renommer pour que cela soit plus clair ? Genre /etc/nginx/https-location.d)
    • un répertoire déclare les chemins accessibles par le port 80 (il n’existe pas /etc/nginx/http-location.d/ ?)

Il y a plus de fichier mais je trouve cela plus clair rien qu’en regardant les noms.

Étude

etb1.amon

  • Nginx écoute sur pleins de ports
    netstat -lpn | grep nginx
    tcp        0      0 0.0.0.0:6080            0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:4203            0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:83              0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:84              0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      11070/nginx: master 
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      11070/nginx: master
    
  • Il n’y a pas de serveur apache
  • Le server_name sur le port 443 est fourni par 2 fichiers de configuration :
    # rgrep -F 'amon.etb1.lan' /etc/nginx/
    /etc/nginx/sites-enabled/genconfig.conf:    server_name amon.etb1.lan;
    /etc/nginx/sites-enabled/default:    server_name amon.etb1.lan;
    
  • L’URL /genconfig est fournies par trop de fichiers :
    # rgrep -i 'location /genconfig' /etc/nginx/
    /etc/nginx/sites-enabled/genconfig.conf:    location /genconfig {
    /etc/nginx/web.d/genconfig.conf:location /genconfig {
    /etc/nginx/web.d/genconfig.conf:location /genconfig/static {
    

Il ne devrait y en avoir que /etc/nginx/web.d/genconfig.conf.

aca.thot

Il faudrait que l’application SSO soit modifiée afin de supporter un préfixe (configuration statique ou depuis la requête ?)

aca.seshat

  • Nginx écoute sur les ports 443 et 7000 (reverse proxy eoleflask) :
    # netstat -lpn | grep nginx
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      778/nginx: master p 
    tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      778/nginx: master p
    
  • Il n’y a pas d’apache
  • Le server_name est fourni par 2 fichiers :
    # rgrep -i 'seshat.ac-test.fr' /etc/nginx/
    /etc/nginx/sites-enabled/genconfig.conf:    server_name seshat.ac-test.fr;
    /etc/nginx/sites-enabled/eolesso.conf:    server_name seshat.ac-test.fr;
    
  • Les URLs /genconfig et /sso sont fournies par nginx :
    # rgrep -i 'Location /\(sso\|genconfig\)' /etc/nginx/
    /etc/nginx/sites-enabled/genconfig.conf:    location /genconfig {
    /etc/nginx/sites-enabled/eolesso.conf:    location /sso/ {
    
  • Si je supprime le fichier /etc/nginx/sites-enabled/eolesso.conf et que je redémarre le service nginx, alors je peux accéder à GenConfig après avoir régler ce problème :
    # nginx -t
    nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
    nginx: configuration file /etc/nginx/nginx.conf test failed
    
  • Il n’y a pas de fichier de configuration /etc/nginx/sites-enabled/default, donc aucun des paramétrage EOLE prévu (comme server_names_hash_bucket_size)

aca.sphynx

  • Installation de eole-sso et configuration
  • Nginx écoute sur les ports 80, 443 et 7000 :
    # netstat -lpn | grep nginx
    tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      8060/nginx: master  
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      8060/nginx: master  
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8060/nginx: master
    
  • Il n’y a pas d’apache
  • Le server_name est fourni par 3 fichiers :
    rgrep -i 'sphynx.ac-test.fr' /etc/nginx/
    /etc/nginx/sites-enabled/default:# Configuration HTTP sphynx.ac-test.fr
    /etc/nginx/sites-enabled/default:    server_name sphynx.ac-test.fr;
    /etc/nginx/sites-enabled/default:# Configuration HTTPS sphynx.ac-test.fr
    /etc/nginx/sites-enabled/default:    server_name sphynx.ac-test.fr;
    /etc/nginx/sites-enabled/genconfig.conf:    server_name sphynx.ac-test.fr;
    /etc/nginx/sites-enabled/eolesso.conf:    server_name sphynx.ac-test.fr;
    
  • L’URL /genconfig est fournies par trop de fichiers :
    # rgrep -i 'location /genconfig' /etc/nginx/
    /etc/nginx/sites-enabled/genconfig.conf:    location /genconfig {
    /etc/nginx/web.d/genconfig.conf:location /genconfig {
    /etc/nginx/web.d/genconfig.conf:location /genconfig/static {
    
  • L’URL /sso est fournies par le mauvais fichier :
    # rgrep -i 'location /sso' /etc/nginx/
    /etc/nginx/sites-enabled/eolesso.conf:    location /sso/ {
    

Il faudrait que le sso soit fourni par /etc/nginx/web.d/eolesso.conf.

#4 Updated by Joël Cuissinat 5 months ago

  • Status changed from Nouveau to Ne sera pas résolu

#5 Updated by Joël Cuissinat 5 months ago

  • Status changed from Ne sera pas résolu to Nouveau
  • Parent task deleted (#29858)
  • Release set to EOLE 2.7.2
  • Story points set to 2.0

#6 Updated by Joël Cuissinat 5 months ago

  • Tracker changed from Tâche to Scénario
  • Subject changed from Warning nginx sur la plupart des modules to Essayer de corriger les warning nginx
  • Due date set to 05/22/2020
  • Target version changed from Prestation Cadoles MEN 16-18 to sprint 2020 19-21 Equipe MENSR

#7 Updated by Joël Cuissinat 5 months ago

  • Related to Scénario #29858: Déplacer la variable "activer_nginx_web" dans un dictionnaire "commun" added

#8 Updated by Joël Cuissinat 5 months ago

  • Story points changed from 2.0 to 4.0

#9 Updated by Joël Cuissinat 5 months ago

  • Description updated (diff)

#10 Updated by Joël Cuissinat 4 months ago

  • Assigned To set to Daniel Dehennin

#12 Updated by Joël Cuissinat 4 months ago

Déjà, les tests Jenkins des différents modules ne signalent plus d'erreurs liées à nginx ;)

Je vais re-tester les 4 configurations identifiées :
  • cas n°1 : test aca.thot + SSO local 443 (config à saisir)
    • /genconfig : OK
    • /sso : OK sauf CSS
    • nginx -t : OK
  • cas n°2 : test aca.seshat + SSO local 443 (port à modifier)
    • /genconfig : OK
    • /sso : OK sauf CSS
    • nginx -t : OK
  • cas n°3 : test aca.sphynx + SSO local 443 (config à saisir)
    • /genconfig : OK
    • /sso : OK sauf CSS
    • nginx -t : OK
  • cas n°4 : test etb1.amon + SSO distant 443 (config défaut)
    • /genconfig : OK
    • /sso : OK (Scribe)
    • nginx -t : OK

#13 Updated by Joël Cuissinat 4 months ago

  • Status changed from Nouveau to Terminé (Sprint)

Also available in: Atom PDF