nginx, тонкий и несколько хостов

Я пытаюсь настроить несколько доменов на моем сервере под управлением nginx + thin. Например, я бы хотел, чтобы www.domain1.com и www.domain2.com обращались к разным приложениям с разными корневыми путями к соответствующим приложениям.

Если вы знакомы с nginx, я разместил свой файл nginx.conf внизу этого поста.

Я думал, что мог бы просто попробовать иметь несколько блоков серверов, но затем я столкнулся с проблемой, когда сервер по умолчанию выбрал случайный тонкий порт, и оба домена перешли к одному и тому же приложению. * Основная причина в том, что все порты для обоих приложений находятся внутри блока thin_cluster. *

Я предполагаю, что моя главная проблема в том, что есть thin_cluster, который не связан с конкретным сервером. И затем есть серверный блок, который имеет имя_сервера и т. Д. Однако, thin_cluster не может быть вложенным в блоке сервера.

Любые идеи о том, как обслуживать несколько хостов?

Вот мой файл /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;
    }
  }
}

1 ответ

Решение

Вы можете описать как разделы "server" и "upstream" mach по своему усмотрению.

вышестоящий кластер1 {
  ...;
} восходящий кластер2 {
  ...;
} сервер {слушай 80; имя_сервера www.domain1.com;
  root /home/app1;
  location / {
    try_files $uri/index.html $uri.html $uri @backend;
  }
  location @backend {
      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;
      proxy_pass http://cluster1;
  }
} сервер {слушай 80; имя_сервера www.domain2.com;
  root /home/app2;
  location / {
    try_files $uri/index.html $uri.html $uri @backend;
  }
  location @backend {
      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;
      proxy_pass http://cluster2;
  }
}

Вот пример.

Вместо некрасивых блоков if я использовал try_files. Просто прочитайте об этом в документации.

Другие вопросы по тегам