静的コンテンツにX-Accel-Expiresヘッダーと、Last-Modifiedヘッダーを追加しました。他に何もキャッシュせずにこれらの要素をキャッシュするための正しい設定を知りたいのですが。
これは私が現在持っているものですが、何もキャッシュしません:
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
client_max_body_size 2000m;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
ssl_certificate /etc/nginx/chain.pem;
ssl_certificate_key /etc/nginx/key.key;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G;
proxy_temp_path /var/lib/nginx/proxy 1 2;
proxy_cache_use_stale error timeout invalid_header http_502;
server {
listen 80;
server_name domain;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 700;
proxy_set_header Host $http_Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ものをキャッシュするには、最初に次のようにhttp
コンテキスト内に プロキシキャッシュパス を作成する必要があります。
proxy_cache_path /var/cache/nginx/site1 levels=1:2 keys_zone=site1:10m max_size=1G;
次に、オプションで プロキシキャッシュキー を定義することもできます。キャッシュされたエントリと同じキャッシュキーを持つリクエストは、キャッシュされた応答がある場合はそれを受け取ります。ただし、デフォルトで十分な場合もあるため、これは完全にオプションです。
次に、特定のコンテキストでキャッシュを有効にするには、次のように、使用するキャッシュを指定します。
proxy_cache site1;
proxy cache valid ディレクティブの説明によると、nginxはすでにX-Accel-Expires
を尊重し、それに基づいて動作するため、基本的にこの時点で完了です。 X-Accel-Expires
を含まないものはキャッシュしたくないので、デフォルトの有効時間として値0を追加することをお勧めします(コンテンツ内でX-Accel-Expires
を設定すると、このデフォルト値が上書きされます) )。
proxy_cache_valid 0m;
キャッシュがないことを除けば、設定ファイルは有効であり、プロキシ自体はすでに機能していると思います。
次に、基本的に、構成を修正するために必要なのは、http
、server
、またはlocation
コンテキストに以下を追加することだけです。
proxy_cache cache;
proxy_cache_valid 0m;
(もちろん、キャッシュパスが存在し、正しいアクセス許可を持っていることを確認することもできます。)
言及された habrahabr 記事/例に関しては、キャッシュキーに$http_if_modified_since
を含めることは実際には正しくないと思います。これは、マルチキャッシュされたエントリが多数発生する可能性があるためです。 、キャッシュを効果的に浪費します。
また、nginxはX-Accel-Expires
ヘッダーをプロキシしない可能性が高いことにも注意してください。内部でのみ使用され、IIRCはこのヘッダーを転送しない場合があります。このような動作を変更するには、プロキシするように明示的に要求する必要があります(nginxを介してコンテンツをデバッグし、アプリがヘッダーを設定する方法などを確認する場合)。
proxy_pass_header "X-Accel-Expires";
ロシアのITブログのnginxでのX-Accel-Expires
ヘッダーの使用について 良いハウツー があります。あなたの場合はとても便利かもしれないと思います。
その理由は、キャッシュが定義されているが有効になっていないためだと思います--proxy_cache cache;
不足している。