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;
  }
  場所@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_redirect off;
      proxy_pass http:// cluster1;
  }
}
サーバー{
  80を聞く;
  server_name www.domain2.com;
  ルート/home/ app2;
  位置 / {
    try_files $ uri / index.html $ uri.html $ uri @backend;
  }
  場所@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_redirect off;
      proxy_pass http:// cluster2;
  }
}

これが例です。

醜い「if」ブロックの代わりに、「try_files」を使用しました。ドキュメントでそれについて読んでください。

于 2011-02-11T04:28:14.610 に答える