0

私はRailsだけをNginx(Apacheなし)でまっすぐに使用していますが、仮想ホストで次のものが必要かどうか疑問に思っています:

        # serve static content directly
        location ~* \.(ico|jpg|gif|png|css|js|swf|html)$ {
          if (-f $request_filename) {
            expires max;
            break;
          }
        }

Apacheを使用していない場合でも関係がありますか?

前もって感謝します。

4

3 に答える 3

2

Railsを使用しているので、おそらく必要な構成は次のとおりです。

server {
    listen 80;
    server_name example.com;

    location / {
        root path/to/static/files;
        try_files $uri @rails;
        expires max;
    }

    location @rails {
        # proxy_pass to gunicorn or whatever...
    }
}

ただし、すべてのメディアファイルを別のディレクトリに保存することをお勧めします。

server {
    listen 80;
    server_name example.org;

    location / {
        # proxy_pass to gunicorn or whatever...
    }

    location /media/ {
        root path/to/static/files;
        try_files $uri @rails;
        expires max;
    }
}

次のような醜く複雑なルールを残します。

location ~* \.(ico|jpg|gif|png|css|js|swf|html)$`

PHPの人々に。彼らは通常、プロジェクトでコードとメディアの混乱を抱えており、アプリケーションですべてのアプリケーションロジックを実行するのではなく、Webサーバー構成でプログラミングするのが好きです。

于 2013-02-22T12:22:23.647 に答える
1

このディレクティブは、要求されたファイルがこれらの拡張子の1つで終わり、存在する場合に、ヘッダーを可能な最大値に設定し、それ以上のディレクティブの処理を停止するようにnginxに指示します。expiresこれらのファイルはnginxによって提供されます。これは、apacheを使用するかどうかに関係なく有効なディレクティブです。使用する必要はありません、nginxは静的ファイルの提供に非常に優れているため、使用することをお勧めします。

アップデート

他の人が指摘しているように、は使用しないでくださいif。これは次の方法で実行できます。

location ~* \.(ico|jpg|gif|png|css|js|swf|html)$ {
    try_files $uri =404;
    expires max;
}

特別な処理を行う場合は、名前付きの場所を使用してください。

location ~* \.(ico|jpg|gif|png|css|js|swf|html)$ {
    try_files $uri @process_404;
    expires max;
}

location @process_404{
    # do your stuff
}
于 2013-02-22T00:04:33.657 に答える
1

これifは無意味であり、CPUを無駄にするだけです。

ドキュメントから:

応答コードが200、201、204、206、301、302、303、304、または307の場合、「Expires」および「Cache-Control」応答ヘッダーフィールドの追加または変更を有効または無効にします。

@ http://nginx.org/r/expires

ここに404が見えますか?私はしません。

ngx_http_rewrite_moduleディレクティブの現在のセットの処理を停止します。

@ http://nginx.org/r/break

そして、私はあなたの場所に他の書き換えディレクティブを見ません。

于 2013-02-22T09:31:28.357 に答える