0

現在、レールでマルチドメイン cms を構築しています。この内容は次の変更まで同じなので、静的ファイルを介してキャッシュしたいと思います。

foo.com と baz.com のいくつかのキャッシュ ページを含むパブリック ディレクトリ (どちらの場合も / と /asdf):

public/
   assets/
      cms.css
   sites/
      foo.com/
         assets/
            screen-some-hash.min.css
         index.html
         asdf/
            index.html
      baz.com/
         assets/
            screen-some-hash.min.css
         index.html
         asdf/
            index.html

私がやりたいことは次のとおりです。

www を非 www にリダイレクトする (動作)

リクエストにサブドメイン (cms、admin など) が含まれている場合: パスに /assets が含まれている場合は、public/assets のファイルを提供し、有効期限を 30d 程度に設定します。/assets = public/assets および public/ はパッセンジャー ルートであるため、ここでは問題ありません。それ以外はすべて、レールを介して処理します。特別なキャッシングなどは必要ありません。

他のすべてのリクエスト (サブドメインがないことを意味します) の場合: パスに /assets が含まれている場合は、public/sites/$host$request_uri のファイルを提供し、有効期限を 30 日程度に設定します。その他すべて: public/sites/$host$request_uri を確認するか、Rails アプリにフォールバックします。

www / non-wwwリダイレクト以外のnginx条件を使用したことがなく、上記の条件に対して何をしなければならないか本当にわかりません。可能であれば、キャッシュされたものにリダイレクト (つまり、/sites/foo.com/asdf へのリダイレクト) を使用したくありません。代わりに、http:// foo.com/asdf

さらに、不明な量のドメインを処理したいので、ホスト名をハードコーディングしたくありません。また、これには複数の Rails アプリケーションを使用したくありません。

4

2 に答える 2

1

100% ではありませんが、今のところは十分に機能するものを手に入れました。

server {
  listen   80;
  server_name  *IP*;

  if ($host ~* www\.(.*)) {
    set $host_without_www $1;
    rewrite ^(.*)$ http://$host_without_www$1 permanent;
  }

  location ~ ^/(assets)/  {
    try_files /sites/$host$uri $uri @passenger;

    root /home/cms/app/current/public;
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  location / {
    try_files /sites/$host$uri/index.html /sites/$host$uri $uri @passenger;
    root   /home/cms/app/current/public;
  }

  location @passenger {
   access_log  /home/cms/app/shared/log/access.log;
   error_log  /home/cms/app/shared/log/error.log;
   root   /home/cms/app/current/public;
   passenger_enabled on;
  }
}
于 2012-12-13T20:52:37.820 に答える
0

サブドメインの場合、これでうまくいくはずです:

server {
    server_name ~^(?<subdomain>.+)\.example\.com$;
    access_log /var/log/nginx/$subdomain/access.log;
    location /assets {
        expires max;
    }
    location / {
        proxy_pass http://your_rails_app;
    }
}

私のRubyアプリの経験はGitlabだけなので、proxy_pass設定についてはよくわかりません。これが少なくとも少し役立つことを願っています。

server {
    server_name example.com;

    location /assets {
        root /public/sites/$hostname/$request_uri;
        expires max;
    }
}

今は実際にテストする機会がないので、独自の設定を追加して少し試してみる必要があります。しかし、それはあなたに道を示すはずです。

于 2012-12-13T20:14:55.143 に答える