Я настроил сервер nginx в ubuntu в качестве обратного прокси-кеш-сервера. Мой код приложения находится в папке / var / www / myapp.
Ниже приведены конфигурации, которые я дал в
server {
listen 80; ## listen for ipv4; this line is default and implied
root /var/www/;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080/;
rewrite ^([^.]*[^/])$ $1/ permanent;
add_header X-Cache-Status $upstream_cache_status;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
deny all;
}
}
это содержимое моего файла nginx / sites-available / default
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 1024 ;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
proxy_cache_path /var/www/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
proxy_temp_path /var/www/cache/tmp;
proxy_cache my-cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
это содержимое моего файла nginx / nginx.conf
Nginx кэширует файлы в каталоге / var / www / cache
Но когда я проверяю ответ заголовка моей страницы http://mydomain.com/myapp в firefox с помощью firebug он показывает
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection keep-alive
Content-Encoding gzip
Content-Length 3817
Content-Type text/html; charset=utf-8
Date Fri, 29 Mar 2013 10:19:23 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma no-cache
Server nginx/1.1.19
Vary Accept-Encoding
X-Cache-Status MISS
X-Powered-By PHP/5.3.10-1ubuntu3.6
X-Cache-Status - это MISS. Почему не обслуживается из кеша?
Редактировать: Я пропустил это в первый раз, но ваше приложение отправляет этот заголовок Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
что предотвратит кеширование. Вы должны изменить свое приложение, чтобы не отправлять этот заголовок, если в этом нет необходимости.
Я пробовал ваши настройки и по первому запросу получаю MISS
, что ожидаемо, поскольку его еще нет в кеше. При последующих запросах я получаю HIT
.
Я использую версию 1.2.6, а вы - 1.1.9. в примечания к выпуску, похоже, есть несколько исправлений ошибок для кеширования между вашей версией и моей. Возможно, ваша конфигурация в порядке, но ваша версия глючит?
Вы также можете попробовать войти в систему, чтобы увидеть, что nginx говорит на стороне сервера:
log_format cache_status '[$time_local] "$request" $upstream_cache_status';
access_log logs/cache.log cache_status;
Наряду с другими $upstream_
переменные, возможно, вы сможете получить дополнительную информацию о том, что идет не так, через ведение журнала.
Из: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_valid
Синтаксис: proxy_cache_valid [код ...] время;
...
Параметры кеширования также можно задать прямо в заголовке ответа. Это более высокий приоритет чем установка времени кеширования с помощью директивы.
- В поле заголовка «X-Accel-Expires» задается время кеширования ответа в секундах. Нулевое значение отключает кеширование ответа. Если значение начинается с префикса @, оно устанавливает абсолютное время в секундах с начала эпохи, до которого ответ может быть кэширован.
- Если в заголовке нет поля «X-Accel-Expires», параметры кеширования могут быть установлены в полях заголовка «Истекает» или
«Кэш-контроль».- Если заголовок включает «Установить-Cookie» поле, такой ответ не будет кэшироваться.
- Если заголовок включает поле «Vary» со специальным значением «*», такой ответ не будет кэшироваться (1.7.7). Если заголовок включает
поле «Vary» с другим значением, такой ответ будет кеширован
с учетом соответствующих полей заголовка запроса (1.7.7).Обработку одного или нескольких из этих полей заголовка ответа можно отключить с помощью proxy_ignore_headers директива.
Установлено большинство веб-приложений Set-Cookie
заголовок, поэтому ответ не будет кэшироваться. Чтобы исправить это, используйте эту директиву:
proxy_ignore_headers Set-Cookie;