4

我正在尝试在运行 nginx + Thin 的服务器上设置多个域。例如,我希望 www.domain1.com 和 www.domain2.com 转到不同的应用程序,它们各自的应用程序具有不同的根路径。

如果你熟悉 nginx,我已经在这篇文章的底部发布了我的 nginx.conf 文件。

我在想我可以尝试拥有多个服务器块,但后来我遇到了一个问题,服务器默认选择一个随机瘦端口,两个域都转到同一个应用程序。*主要原因是两个应用程序的所有端口都位于 Thin_cluster 块内。*

我想我主要担心的是thin_cluster 与特定服务器没有关联。然后是具有 server_name 等的服务器块。但是,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;
    }
  }
}
4

1 回答 1

6

您可以根据需要将“服务器”和“上游”部分描述为马赫。

上游集群1 {
  ...;
}
上游集群2 {
  ...;
}
服务器 {
  听 80;
  server_name www.domain1.com;
  根 /home/app1;
  地点 / {
    try_files $uri/index.html $uri.html $uri @backend;
  }
  位置@后端{
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header 主机 $http_host;
      代理重定向关闭;
      proxy_pass http://cluster1;
  }
}
服务器 {
  听 80;
  server_name www.domain2.com;
  根 /home/app2;
  地点 / {
    try_files $uri/index.html $uri.html $uri @backend;
  }
  位置@后端{
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header 主机 $http_host;
      代理重定向关闭;
      proxy_pass http://cluster2;
  }
}

这是一个例子。

我没有使用难看的“if”块,而是使用了“try_files”。只需在文档中阅读它。

于 2011-02-11T04:28:14.610 回答