2

動的な安らかな URL の下に静的ファイルを持つ Rails Web アプリがあります。例えば:

/projects/1/attachments/some_file.xls

サーバー上の静的ファイルにリダイレクトするようにNginxをセットアップしたい:

/public/attachments/1/some_file.xls

1 は動的プロジェクト ID です。

ロケーションブロックと書き換えステートメントは、Nginx 構成ファイルをどのように探しますか?


アップデート

元の質問への回答として、以下の回答にマークを付けました。私の場合、プロジェクトの添付ファイルの URL を書き換える必要はありませんでしたが。Rails ビュー erb で既に URL を再マッピングしていたことを忘れていました。

私の本当の目標は、Thin がキャッシュ応答ヘッダーを添付ファイルに追加するのを阻止することでした。最終的に、次のような添付ファイルの場所を追加するだけで、Nginx でこれを防ぐことができました。

location /attachments/ {
    expires    off;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-cache, no-store";
    access_log off; 
    break;
}
4

2 に答える 2

0

ここに簡単な例があります。

location /project/ {
    rewrite ^/project/([0-9]+)/attachments/(.*)$ /public/attachments/$1/$2 last;
}

より複雑なルールが必要な場合は、公式ヘルプを参照してください。

http://wiki.nginx.org/HttpRewriteModule#rewrite

于 2012-08-08T18:38:42.027 に答える
0

Paperclip、Dragonfly などが機能するために nginx の書き換えルールを実行する必要がないため、画像/ファイル ライブラリに問題があるようです。たとえば、Paperclip では、モデルで DSL を使用するときに、URL やパスの形式を明示的に設定できます。ペーパークリップの場合、次のようになります。

has_attached_file :attachment,
                  :url => '/attachments/:id/:style/:basename.:extension',
                  :path => ':rails_root/public/attachments/:id/:style/:basename.:extension'

次に、公開ディレクトリにあるため、すべてが nginx によって自動的に提供されるはずです。書き換え規則は必要ありません。

于 2012-08-08T19:39:35.093 に答える