2

nginx (0.7.67) で静的ファイルの Expires ヘッダーを構成しようとしています。静的ファイルは Golang リバース プロキシから提供されます。

location /rev/ {
  proxy_pass http://localhost:8910/;
  proxy_redirect off;
  proxy_set_header  Host               $host;
  proxy_set_header  X-Real-IP          $remote_addr;
  proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
  proxy_set_header  X-Forwarded-Proto  https;

  # I am putting this here, because nginx only uses one location. Is this OK?
  location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
    expires 30d;
  }
}

このようにすると、nginx を再起動してもエラーは発生しませんが、静的ファイルは提供されなくなります。

私はすでに次の星座を試しましたが、うまくいきません:

server {
  ...
  location /rev/ {
    proxy_pass http://localhost:8910/;
    proxy_redirect off;
    proxy_set_header  Host               $host;
    proxy_set_header  X-Real-IP          $remote_addr;
    proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto  https;
  }

  location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
      expires 30d;
  }
}

質問: リバース プロキシの背後にあるアプリケーションにある静的ファイルに、expires ヘッダーを適用するにはどうすればよいですか?

4

3 に答える 3

1

http://wiki.nginx.org/HttpProxyModuleのドキュメントを読むと、ディレクティブを使用して同様の機能を実現することについて言及されproxy_cache_*ていますが、正確にはあなたが求めているものではありません。ドキュメントには次のように記載されています。

Upstream cache-related directives have priority over proxy_cache_valid value,
in particular the order is:

X-Accel-Expires
Expires/Cache-Control
proxy_cache_valid

Expiresそのため、プロキシ レベルでヘッダーを設定することはサポートされていないか、推奨されていないようです。

Expiresヘッダーを上流に設定する必要があると感じています。これは、Go で http.ResponseWriter のヘッダーを http ハンドラー関数に設定することで実行できます (ちょっとハックですが、文字列のタイムゾーンを修正するもっと良い方法があると思います)。

w.Header().Set("Expires", strings.Replace(time.Now().AddDate(0, 0, 30).Format(time.RFC1123), "UTC", "GMT", 1))

前述のように、これは出力文字列で に置き換えUTCられます。GMT必要かどうかはわかりませんが、調べた HTTP ヘッダーではこれが一般的な形式のようです。UTCブラウザーで同等に受け入れられるかどうかを確認するために仕様を調べていませんが、そうでない理由はわかりません。

申し訳ありませんが、実際には Nginx の回答ではありません。

于 2013-03-25T10:41:36.933 に答える
0

expiresディレクティブかadd_headerはブラウザに返すものだと思います。

バックエンドから来るものをやみくもにキャッシュしたい場合は、次を試すことができます。

proxy_cache_valid any 1m;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid

于 2016-08-05T11:13:22.907 に答える