IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Serveurs (Apache, IIS,...) Discussion :

Configuration avancée Nginx


Sujet :

Serveurs (Apache, IIS,...)

  1. #1
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    août 2004
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2004
    Messages : 764
    Points : 891
    Points
    891
    Par défaut Configuration avancée Nginx
    Bonjour,

    Voici un problème de taille auquel je suis confronter, et malgré mes tentatives je n'arrive pas à m'en sortir.

    Voici le sujet :

    J'ai un serveur hébergeant plusieurs nom de domaine. Chaque nom de domaine peut avoir un nombre indéterminé de sous domaines. (en effet, les noms de sous domaines sont générés à la volée dans une application web métier.
    Je dois configurer Nginx comme frontal web devant :
    1. Accepter tout sous domaine en HTTP et rediriger vers HTTPS
    2. Accepter tous sous domaines en HTTPS et rediriger (proxy_pass??) vers un port en fonction du domaine principale
    3. sécuriser l'ensemble avec des certificats wildcard par domaine.


    Jusqu'à présent j'arrive à router tous les sous domaines de tous les domaines arrivant en http vers un seul port.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    server {
          listen      80;
          #server_name ~^(/([A-Z])\w+.pixli.local/gi)?(?<domain>)$;
          server_name ~^(www\.)?;
    
          location /{
                 proxy_pass http://domaineA:8081/;
          }
    }
    mais j'aimerai plutot avoir un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    server {
          listen      80;
          #server_name ~^(/([A-Z])\w+.pixli.local/gi)?(?<domain>)$;
          server_name ~^(www\.)?;
          
          if($host==domaineA){
              location /{
                 proxy_pass http://domaineA:8081/;
              }
           if($host==domaineB)
           {
               proxy_pass http://domaineB:8082/;
           }
    }
    Pourriez vous m'orienter pour arriver à mes fins?
    Merci

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    août 2004
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2004
    Messages : 764
    Points : 891
    Points
    891
    Par défaut J'avance mais ...
    Bonjour,

    Bon j'ai pas mal avancé, mais il persiste un problème.
    En effet, j'arrive bien à rediriger tout le trafic HTTP, vers le HTTPS quelque soit le nom de domaine.
    Puis dans les configurations HTTPS, j'arrive bien à pointer des instances différentes en fonction de leur domaine.

    MAIS je n'arrive pas a obtenir que mon serveur web utilise le nom de domaine complet pour écrire ses url.

    Ex : j'ai un domaine mondomaineA.fr, j'accède avec l'adresse xxx.mondomaine.local ou bbb.mondomaine.local , et mes urls dans mes pages sont écrite comme suit : https://mondomaine.local/monfichier.html

    Voilà ou ca se passe dans mon fichier de config :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    server {
          listen      443 ssl http2;
          server_name *.domaine.local
          ssl_certificate     /home/zope/ssl/domaine-local.crt;
          ssl_certificate_key /home/zope/ssl/domaine-local-open.key;
          location / {
    			proxy_pass http://localhost:8081/VirtualHostBase/https/domaine.local:443/VirtualHostRoot/;
    		  }
    	  }
    c'est bien la partie en rouge qui pose problème. je devrais obtenir de manière dynamique si j'arrive avec xxx.mondomaine.local
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proxy_pass http://localhost:8081/VirtualHostBase/https/xxx.domaine.local:443/VirtualHostRoot/;
    ou si j'arrive avec bbb.domaine.local

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proxy_pass http://localhost:8081/VirtualHostBase/https/bbb.domaine.local:443/VirtualHostRoot/;
    Auriez vous une idée?

  3. #3
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    août 2004
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2004
    Messages : 764
    Points : 891
    Points
    891
    Par défaut Ca y est ... :)
    Bon ça pourra servir à quelqu'un, c'est sûr !
    Voici la config permettant avec Nginx de gérer automatiquement l'ensemble des domaine et sous domaines arrivant sur une machine.

    1. on renvoi tout le trafic http vers le https
    2. on teste le domaine pour router vers une sous instance
    3. on fait la réécriture d'url de manière dynamique par rapport au sous domaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    server {
    	listen 		80;
    	server_name _;
    	return 301 https://$host$request_uri;
    }
    
    server {
          listen      443 ssl http2;
          server_name ~^([A-Z,a-z,0-1])+.domainA.local?; 
    	  ssl_certificate     /etc/ssl/domainA-local.crt;
    	  ssl_certificate_key /etc/ssl/domainA-local-open.key;
    	  location / {
                            resolver 127.0.0.1 [::1];
    	                proxy_set_header Host $http_host;
                            proxy_set_header X-Real-IP $remote_addr;
                            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                            proxy_set_header X-Forwarded-Proto $scheme;
                            proxy_set_header X-Scheme $scheme;
    			
    			proxy_pass http://localhost:8081/VirtualHostBase/https/$host:443/VirtualHostRoot/$uri$is_args$args;
                            
    		  }
    	  }
    
    server {
          listen      443 ssl http2;
          server_name ~^([A-Z,a-z,0-1])+.domaineB.local?;
    	#server_name www.pronline.local   
    	  ssl_certificate     /etc/ssl/domaineB-local.crt;
    	  ssl_certificate_key /etc/ssl/domaineB-local-open.key;
    	  location / {
    	  		resolver 127.0.0.1 [::1];
    	                proxy_set_header Host $http_host;
                            proxy_set_header X-Real-IP $remote_addr;
                            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                            proxy_set_header X-Forwarded-Proto $scheme;
                            proxy_set_header X-Scheme $scheme;
    			
    			proxy_pass http://localhost:8201/VirtualHostBase/https/$host:443/VirtualHostRoot/$uri$is_args$args;
    		  }
    	  }
    Il est important sur une machine Debian d'installer bind9, et de renseigner dans le /etc/hosts les domaines reconnu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    127.0.0.1 domaineA.local domaineB.local
    Avec cette configuration, vous pouvez atteindre l'instance tournant sur localhost:8081, avec toto.domaineA.local ou tutu.domaineA.local ou encore simplement www.domaineA.local, et si vous faite www.domaineB.local alors vous arriverez sur l'instance répondant sur localhost:8201

    Si ca peut servir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. configuration serveur nginx
    Par ambyl dans le forum MkFramework
    Réponses: 5
    Dernier message: 23/04/2015, 22h57
  2. Réponses: 0
    Dernier message: 05/06/2014, 12h03
  3. Danted: Configuration avancée
    Par Gecko dans le forum Réseau
    Réponses: 0
    Dernier message: 09/10/2013, 19h27
  4. MRTG configuration avancée
    Par Gecko dans le forum Debian
    Réponses: 0
    Dernier message: 21/03/2013, 18h50
  5. Configuration avancé UC_09
    Par {F-I} dans le forum Ordinateurs
    Réponses: 8
    Dernier message: 14/10/2009, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo