nginx, thin et plusieurs hôtes

J’essaie de configurer plusieurs domaines sur mon serveur exécutant nginx + thin. Par exemple, je voudrais que www.domain1.com et www.domain2.com consultent différentes applications avec des chemins d’access racine différents vers leurs applications respectives.

Si vous êtes familier avec nginx, j’ai posté mon fichier nginx.conf au bas de ce post.

Je pensais que je pouvais essayer d’avoir plusieurs blocs de serveur, mais j’ai rencontré un problème où le serveur choisirait par défaut un port léger aléatoire et les deux domaines sont allés à la même application. * La raison principale étant que tous les ports des deux applications sont situés à l’intérieur du bloc thin_cluster. *

Je pense que ma principale préoccupation est qu’il existe un thin_cluster qui n’a aucune association avec un serveur particulier. Et puis il y a le bloc serveur qui a le nom_serveur, etc. Cependant, thin_cluster ne peut pas être nested dans le bloc serveur.

Des idées sur la façon de servir plusieurs hôtes?

Voici mon fichier /etc/nginx/nginx.conf

user nginx; worker_processes 5; error_log /var/log/nginx.error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx.access.log main; sendfile on; keepalive_timeout 65; upstream thin_cluster { server 0.0.0.0:3000; server 0.0.0.0:3001; server 0.0.0.0:3002; server 0.0.0.0:3003; server 0.0.0.0:3004; } server { listen 80; server_name www.domain1.com; root /home/ec2-user/helloCloud/public; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename.html) { rewrite (.*) $1.html break; } if (!-f $request_filename) { proxy_pass http://thin_cluster; break; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 

Vous pouvez décrire comme mach “serveur” et “en amont” sections comme vous le souhaitez.

 cluster en amont1 {
   ...;
 }
 cluster en amont2 {
   ...;
 }
 serveur {
   écouter 80;
   nom_serveur www.domain1.com;
   root / home / app1;
   emplacement / {
     try_files $ uri / index.html $ uri.html $ uri @backend;
   }
   emplacement @backend {
       proxy_set_header X-Real-IP $ remote_addr;
       proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
       proxy_set_header Hôte $ http_host;
       proxy_redirect off;
       proxy_pass http: // cluster1;
   }
 }
 serveur {
   écouter 80;
   nom_serveur www.domain2.com;
   root / home / app2;
   emplacement / {
     try_files $ uri / index.html $ uri.html $ uri @backend;
   }
   emplacement @backend {
       proxy_set_header X-Real-IP $ remote_addr;
       proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
       proxy_set_header Hôte $ http_host;
       proxy_redirect off;
       proxy_pass http: // cluster2;
   }
 }

Voici un exemple.

Au lieu des blocs “if”, j’ai utilisé “try_files”. Il suffit de lire à ce sujet dans la documentation.