The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Кеширование статики средствами apache"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Apache, http-серверы)
Изначальное сообщение [ Отслеживать ]

"Кеширование статики средствами apache"  +/
Сообщение от ALex_hha (ok) on 26-Апр-16, 17:34 
Собственно столкнулся с необходимостью, есть проект на симфони, крутится на Apache/2.4.16, и надо для всех картинок по адресу /static/image/template/[0-9]+\.(png|jpg) кешировать их на сервере, чтобы не напрягать каждый раз symphony

Пробовал такой вариант


CacheQuickHandler off
CacheRoot /var/cache/apache2/symphony_cache_disk
<LocationMatch "/static/image/template/[0-9]+\.(png|jpg)">
   CacheEnable disk
</LocationMatch>

но в итоге запрос вида http://example.com/static/image/template/1234.png не попадает в этот Location. Есть подозрения из-за того, что в симфони все адреса роутятся на app.php.

Собственно, вопрос - как средствами apache можно кешировать файлы для определенного локейшена?

P.S.
nginx нет возможности использовать

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Кеширование статики средствами apache"  +/
Сообщение от Etch on 27-Апр-16, 09:10 
Зачем её кэшировать? Статику надо сразу с диска отдавать, т.е. отключить запуск скрипта php по этому пути.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Кеширование статики средствами apache"  +/
Сообщение от ALex_hha (ok) on 27-Апр-16, 11:41 
> Зачем её кэшировать? Статику надо сразу с диска отдавать, т.е. отключить запуск
> скрипта php по этому пути.

Я же писал, что картинку генерит симфони, т.е. по сути запрос вида /static/image/template/1234.png реврайтится на app.php?route=/static/image/template/1234.png и тот уже генерирует и отдает картинку. И вот чтобы каждый раз не нагружать бекенд (симфони) генерацией картинки, надо кешировать на стороне сервера

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Кеширование статики средствами apache"  +/
Сообщение от ALex_hha (ok) on 27-Апр-16, 16:21 
Поднял nginx перед апачем и там все работает отлично


server {
    listen 10.100.30.229:8888;
    server_name api.example.com;

    location / {
        proxy_connect_timeout 120;
        proxy_send_timeout 120;
        proxy_read_timeout 180;

        proxy_pass http://127.0.0.1:80/;
        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 $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
    }

    location ~/static/image/template/[0-9]+\.png {
        proxy_cache_key $scheme://$host$request_uri;
        proxy_cache_methods GET HEAD;
        proxy_cache awt_static_images;
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        proxy_ignore_headers Cache-Control Set-Cookie Expires;

        proxy_cache_valid 200 301 302 1h;
        proxy_cache_bypass $http_x_nocache;

        proxy_pass http://127.0.0.1:80;
        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 $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        add_header X-Cache-Status $upstream_cache_status;
    }
}

Первое обращение


# curl -i -I http://api.example.com:8888/static/image/template/2962.png
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 27 Apr 2016 12:55:27 GMT
Content-Type: image/png
...
X-Cache-Status: MISS

Последующие обращения


# curl -i -I http://api.example.com:8888/static/image/template/2962.png
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 27 Apr 2016 12:55:30 GMT
Content-Type: image/png
...
X-Cache-Status: HIT

Спустя время заданное в proxy_cache_valid


# curl -i -I http://api.example.com:8888/static/image/template/2962.png
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 27 Apr 2016 14:16:39 GMT
Content-Type: image/png
...
X-Cache-Status: EXPIRED

# curl -i -I http://api.example.com:8888/static/image/template/2962.png
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 27 Apr 2016 14:16:42 GMT
Content-Type: image/png
...
X-Cache-Status: HIT

В обход кеша


# curl -I -H "X-NOCACHE: 1" http://api.example.com:8888/static/image/template/2962.png
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 27 Apr 2016 13:19:18 GMT
Content-Type: image/png
...
X-Cache-Status: BYPASS

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Кеширование статики средствами apache"  +/
Сообщение от eRIC (ok) on 28-Апр-16, 12:50 
> Я же писал, что картинку генерит симфони, т.е. по сути запрос вида
> /static/image/template/1234.png реврайтится на app.php?route=/static/image/template/1234.png

если не ошибаюсь это поведение указано в .htaccess файлe, в таком случае люди советуют включать агрессивное кеширование картинок на стороне клиента(через директивы Expire*) и использованием дополнительных оптимизаций включая varnish


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Кеширование статики средствами apache"  +/
Сообщение от ALex_hha (ok) on 28-Апр-16, 14:29 
> включать агрессивное кеширование картинок на стороне клиента(через директивы Expire*)

На стороне клиента не вариант, не будет возможности точечного управления кешом, а иногда нужно

> и использованием дополнительных оптимизаций включая varnish

ну тогда я и nginx могу, просто это дополнительная прослойка. Неужели сам apache такое не умеет?


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру