nginx, тонкий и несколько хостов - PullRequest
4 голосов
/ 10 февраля 2011

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

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

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

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

Есть идеи, как обслуживать несколько хостов?

Вот мой файл /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 Ответ

6 голосов
/ 11 февраля 2011

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

upstream cluster1 {
  ...;
}
upstream cluster2 {
  ...;
}
server {
  listen 80;
  server_name 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;
  }
}
server {
  listen 80;
  server_name 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".Просто прочитайте об этом в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...