Reverse proxy nginx

Bonjour,

J’ai installé yunohost sur une dedibox (Ubuntu trusty + LXC) et je voudrais utiliser nginx comme reverse proxy pour y accéder.

J’ai créé sur cette dedibox 4 conteneurs:

  1. conteneur ‘proyy

    • 10.0.3.100
    • ubuntu trusty
    • nginx
  2. conteneur ‘yunohost

    • 10.0.3.101
    • debian wheezy
    • yunohost
  3. conteneur ‘odoo

    • 10.0.3.102
    • ubuntu trusty
    • odoo 8.0
  4. conteneur ‘web

    • 10.0.3.103
    • ubuntu trusty
    • serveur web nginx

Mon nom de domaine mondomaine.tld pointe, chez mon registar, sur mon adresse IP publique AAA.AAA.AAA.AAA et jai créé 3 sous domaines

  1. yunohost.mondomaine.tdl
  2. odoo.mondomaine.tdl
  3. www.mondomaine.tdl

Chaque sous-domaine doit être redirigé par le conteneur ‘proxy’ (10.0.3.100), donc nginx, sur le conteneur approprié:

  1. yunohost.mondomaine.tdl vers conteneur ‘yunohost’ (10.0.3.101)
  2. odoo.mondomaine.tdl vers conteneur ‘odoo’ (10.0.3.102)
  3. www.mondomaine.tdl vers conteneur ‘web’ (10.0.3.103)

La règle suivante, sur le host, permet de retransmettre les requêtes HTTP au conteneur ‘proxy’:

- iptables -t nat -A PREROUTING -i em1 -p tcp --dport 80 -j DNAT --to 10.0.3.100:80

Sur le conteneur ‘proxy’, j’ai créé un fichier pour chaque sous domaine dans /etc/nginx/sites-available :

File: odoo.mondomaine.tdl:

  server {
    server_name odoo.mondomaine.tdl ;
    location / {
      proxy_pass http://10.0.3.201:8069/ ;
    }
  }

File: www.mondomaine.tdl:

  server {
    server_name www.mondomaine.tdl;
    location / {
      proxy_pass http://10.0.3.103/ ;
    }
  }

File: yunohost.mondomaine.tdl:

 ???

File: /etc/nginx/conf.d/proxy.conf

  proxy_redirect          off;
  proxy_set_header        Host            $host;
  proxy_set_header        X-Real-IP       $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_hide_header       X-Powered-By;
  proxy_intercept_errors on;
  proxy_buffering on;
  proxy_cache_key "$scheme://$host$request_uri";
  proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m inactive=7d max_size=700m;

Le reverse proxy fonctionne car j’ai accès au serveur web du conteneur ‘web’ de l’extèrieur à partir de l’adresse www.mondomaine.tld.

Je ne suis malheureusement pas un spécialiste proxy et malgré de nombreuses sur le net je ne suis parvenu à aucun résultat.

D’avance, merci.

Richard

Salut, je déterre le post mais tu peux tenter mon appli “redirect” : https://github.com/scith/redirect_ynh puis dans le fichier nginx généré changer l’IP 127.0.0.1 par tes différentes IP.
YunoHost crée les fichiers NGinx pour toi (qu’il faudra peut-être adapter un peu)

Déterrage intéressant… @scith, pourrais-tu en dire plus sur ton application, ou mieux enrichir le README.md sur Github ?

Actuellement mon serveur Yunohost (un Banana Pi derrière ma Freebox) est mono-domaine. Je prévois de m’en servir comme serveur de mail pour un autre domaine. Je me documente donc. D’ailleurs, si je ne veux que traiter les mails du nouveau domaine, je me demande s’il suffit de définir un enregistrement mx dans le dns du nouveau domaine. Je testerai après les vacances ;).

Merci.
Mon app ne fait pour l’instant que créer une tuile dans YunoHost ainsi qu’un domaine/chemin qui redirige vers un autre port et/ou chemin.

Par exemple si tu utilises mon application Docker pour faire un conteneur qui s’affiche sur http://127.0.0.1:8080 tu peux faire en sorte que http://tondomaine.tld/app redirige vers ce conteneur de manière invisible. Je m’en sers par exemple avec un conteneur Stealthbox pour faire des apps CouchPotato, Deluge, SickRage et HeadPhones (donc 4 apps dans un seul conteneur …).

J’ai pour projet de l’améliorer encore pour pouvoir rediriger des apps YunoHost existantes (par exemple pour avoir deux chemins) ou encore des redirections vers des sites externes (exemple con : http://domaine.tld/google qui redirige vers Google …)

Bon par contre je débute sur Nginx donc les fichiers nginx.conf sont souvent à modifié selon l’application qui est redirigée. J’ai essayé de faire un fichier qui ratisse le plus large possible pour qu’un maximum de situations soient supportées mais j’ai encore un peu de mal (par exemple j’arrive pas encore à mapper un conteneur Odoo vers un chemin YunoHost).
La même technique est utilisée pour mon app DockerUI https://github.com/scith/dockerui_ynh et RStudio dockerisée https://github.com/scith/docker_rstudio_ynh

Dites-moi si vous avez des idées d’amélioration :smile:

Bonjour scith, merci d’avoir répondu à mon post. Je commençais à désespérer. Je ne vois pas vraiment comment fonctionne la solution que tu me proposes. Je n’utilise pas docker et j’essaye de comprendre comment fonctionne les conteneurs LXC. Tout fonctionne a peu prés correctement.
Je n’arrive pas à accéder à mon conteneur Yunohost. Je ne vois pas quoi mettre dans la config de nginx.

Ah désolé j’avais mal lu ton post initial :confused:
Ma solution permet de faire tout seul les redirections Nginx mais ça ne fonctionne que sur YunoHost. Concrètement dans ton conteneur yunohost tu pourras faire des redirections vers tes autres conteneurs (via le nginx du conteneur YunoHost).

Par contre si tu veux paramétrer Nginx sur ta dedibox (et donc “au-dessus” du conteneur) elle ne pourra pas t’aider désolé :frowning:

Mon architecture est en effet un peu différente :

  • YunoHost installé directement sur le serveur
  • Différents conteneurs installés comme des applications YunoHost. Ces conteneurs utilisent Docker au lieu de LXC (technos assez proches. Je crois d’ailleurs que Docker utilise LXC).

J’avais voulu faire comme toi au début pour plus de propreté mais j’ai désespéré car j’arrivais justement pas à gérer mes redirections Nginx. Comme YunoHost le fait très bien, je me suis dit que j’allais plutôt mettre YunoHost sur le serveur (sans conteneur) et le laisser gérer les redirections vers mes conteneurs

Tu n’utilises pas LXC mais que des conteneurs Docker ?

Oui voilà
Plus d’infos si ça t’intéresse sur mon autre post :smile: Docker containers and management in YunoHost!

Sinon désolé de ne pouvoir t’aider pour la redirection des LXC

Tant pis. Je vais essayer de trouver des infos sur nginx. Merci pour tout.