0

2台の別々のマシンにnodejsサーバーとSSL対応のnginxがあります。リクエスト/レスポンスはすべて正常に機能しますが、nginx でキャッシュを取得する際に問題が発生します。私のサーバー構成は以下です。最初は、'location /' ブロックにプロキシ キャッシュ ステートメントがあり、その時点ではインデックス ページのみをキャッシュしていました。nginx は set-cookie ヘッダーを含むリクエストをキャッシュしないことを読んだので、それらも無視しました (ただし、インデックス ページが以前にキャッシュされるのを止めませんでした)。これを丸一日いじってみましたが、nginx に js ファイルと css ファイルをキャッシュさせることができませんでした。このようなリクエストはすべて、ノード サーバーにルーティングされます。アクセスログやエラーログに異常なエントリはありません。私は何を間違っていますか?

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /webserver/nginx/credentials/cert;
    ssl_certificate_key /webserver/nginx/credentials/key;
    ssl_session_cache shared:SSL:10m;

    location ~ .*\.(ico|css|js|gif|jpe?g|png)$ {
        proxy_pass http://somewhere:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect http:// https://;

        proxy_ignore_headers "Set-Cookie";
        proxy_cache one;
        proxy_cache_valid 200 1d;
        proxy_cache_valid any 1m;
        expires 7d;
        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }

    location / {
        proxy_pass http://somewhere:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect http:// https://;
    }
}
4

1 に答える 1

2

これは私が使用しているものです (SSL を有効にしていませんが、それが問題だとは思いません)。プロキシに渡す前にルートでファイルを探すように nginx に指示する try_files 行がありません。また、実際にはキャッシュの問題ではありません。この構成では、静的ファイル リクエストが node.js バックエンドにヒットすることはありません。

server {
  root        /public;
  listen      80;
  server_name _;
  index       index.html index.htm;
      charset     utf-8;

  # proxy request to node
  location @proxy {
    proxy_set_header   Host             $http_host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header   X-NginX-Proxy    true;

    proxy_pass         http://127.0.0.1:3010;
    proxy_redirect     off;
    break;
  }  

  location / {
    try_files $uri.html $uri $uri/ @proxy;
  }

  #  static content
  location ~ \.(?:ico|jpg|css|png|js|swf|woff|eot|svg|ttf|html|gif)$ {
    access_log  off;
    log_not_found off;
    add_header  Pragma "public";
    add_header  Cache-Control "public";
    expires     30d;  
  }

  location ~ /\. {
    access_log    off;
    log_not_found off;
    deny all;
  }

  error_page 500 502 503 504 /50x.html;
      location = /50x.html {
      }

      error_page 404 /404.html;
      location = /404.html {
      }

}
于 2012-09-10T03:22:45.233 に答える