Apache+Nginx кеширование картинок в браузере

12
S7
На сайте с 27.11.2011
Offline
14
13099

Настроил, чтобы Nginx отдавал сайт из своего кеша.Нужно, чтобы браузер кешировал картинки.

Сейчас так:

Server: nginx

Date: Sat, 14 Apr 2012 09:34:56 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.2.17
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Etag: 2c0187b8225c556ddea9e68e268f2bd3
Cache-Control: no-cache
Pragma: no-cache
Content-Encoding: gzip

200 OK

Http

http {

include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
gzip on;
gzip_static on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
keepalive_timeout 0;
limit_conn_zone $binary_remote_addr zone=addr:10m;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:30m max_size=100m;
proxy_temp_path /var/lib/nginx/tmp/proxy 1 2;
proxy_cache_use_stale error timeout invalid_header http_502;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;
include /etc/nginx/conf.d/*.conf;
client_max_body_size 16m;
log_format isp '$bytes_sent $request_length';

Server

server {

listen xxx.xxx.xxx.xxx:80;
server_name site.ru www.site.ru;
rewrite ^(/manager/.*)$ https://$host$1 permanent;
error_page 404 = @fallback;
location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass http://xxx.xxx.xxx.xxx:8080;
proxy_redirect http://site.ru:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://xxx.xxx.xxx.xxx:8080;
proxy_redirect http://site.ru:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
proxy_cache cache;
proxy_cache_valid 10m;
proxy_cache_valid 404 1m;
location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
access_log /var/www/httpd-logs/site.ru.access.log ;
access_log /var/www/nginx-logs/user isp;
set $proot "/var/www/user/data/www/site.ru";
if ( $host = "site.ru" ) {
break;
}
if ( $host = "www.site.ru" ) {
break;
}
if ( $host ~* ^(.*).site.ru$ ) {
set $proot /var/www/user/data/www/site.ru/$1;
break;
}
root $proot;
}
location @fallback {
proxy_pass http://xxx.xxx.xxx.xxx:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}

Куда добавить expires, чтобы картинки открывались из кеша браузера?

LM
На сайте с 18.10.2009
Offline
117
#1
Sven765:
Куда добавить expires, чтобы картинки открывались из кеша браузера?

В location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$

SI
На сайте с 03.12.2007
Offline
130
#2
Sven765:

Сейчас так:
Server: nginx

Date: Sat, 14 Apr 2012 09:34:56 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.2.17
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Etag: 2c0187b8225c556ddea9e68e268f2bd3
Cache-Control: no-cache
Pragma: no-cache
Content-Encoding: gzip

200 OK

Это динамическая PHP страница, статика (с Last-Modified: ) должна и так кешироваться.

-= Онлайн сервисы =-
M
На сайте с 16.09.2009
Offline
278
#3
Sigmo#ID:
Это динамическая PHP страница, статика (с Last-Modified: ) должна и так кешироваться.

*Может*. Но не должна и не обязана. Expires на самом деле здорово браузеру/прокси помогают при принятии решения о кешировании.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
S7
На сайте с 27.11.2011
Offline
14
#4
LinuxMan:
В location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$

Пробывал не работает.

Пробывал в отдельной location

location ~* \.(bmp|gif|jpg|jpeg|ico|png)$ {

root /var/www/user/data/www/site.ru;
access_log off;
expires 6m;
}

Не работает.

M
На сайте с 16.09.2009
Offline
278
#5
Sven765:

Пробывал в отдельной location
location ~* \.(bmp|gif|jpg|jpeg|ico|png)$ {

root /var/www/user/data/www/site.ru;
access_log off;
expires 6m;
}

Не работает.

Шутник-затейник :) Вы еще в секундах установите expires ;)

Поймите, что браузер *не обязан* кешировать контент. Тем более на такой миниатюрный срок аж в 6 минут.

S7
На сайте с 27.11.2011
Offline
14
#6
myhand:
Поймите, что браузер *не обязан* кешировать контент.

Вы спросите у гугля, а потом у тех, куда зайдете, почему у них должен кешировать, а у вас не должен.

M
На сайте с 16.09.2009
Offline
278
#7
Sven765:
Вы спросите у гугля, а потом у тех, куда зайдете, почему у них должен кешировать, а у вас не должен.

Ниасилил :(

Попробуйте поставить большее значение expires. Часы, а не минуты - как минимум. Что непонятного-то?

S7
На сайте с 27.11.2011
Offline
14
#8

Пробывал, перед минутами и дни, и года.

Автор писал, у него nginx из кеша в браузер страницы отдает, как видите expires работает, правда не так, как надо, а именно 1981 год.)

Еще интересует как добавить: Keep-Alive?

Автор сайта не доступен, поэтому спросить не могу.

[Удален]
#9
Sven765:
Пробывал, перед минутами и дни, и года.

Еще интересует как добавить: Keep-Alive?
Автор сайта не доступен, поэтому спросить не могу.

http://nginx.org/ru/docs/http/ngx_http_core_module.html

Вся документация на русском. Неужели сложно прочитать? :)

M
На сайте с 16.09.2009
Offline
278
#10
Sven765:
Пробывал, перед минутами и дни, и года.

Пардонте. Во-первых, это не картинка, а HTML.

В этом случае вам надо

1) поставить expires в другой location (там, где у вас проксирование)

2) убрать expires, который генерирует этот быдлодвижек (вместе с остальной руганью от него про no-cache в других заголовках). В принципе, можно посмотреть в сторону proxy_hide_header/proxy_set_header - для редактирования/добавления заголовков. Но правильно - решить это на уровне кода движка сайта.

Sven765:
Автор писал, у него nginx из кеша в браузер страницы отдает, как видите expires работает, правда не так, как надо, а именно 1981 год.)

При таком значении expires - браузер просто не будет кешировать. Для этого оно, судя по всему, и выставлено.

Либо вам врут - либо "автор" и сам ни бельмеса не понимает.

Sven765:
Еще интересует как добавить: Keep-Alive?

keepalive_timeout поставьте вменяемый - а лучше просто верните значение по-умолчанию.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий