Кеширование статики средствами apache, ALex_hha, 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 нет возможности использовать
|
- Кеширование статики средствами apache, Etch, 09:10 , 27-Апр-16 (1)
Зачем её кэшировать? Статику надо сразу с диска отдавать, т.е. отключить запуск скрипта php по этому пути.
- Кеширование статики средствами apache, ALex_hha, 11:41 , 27-Апр-16 (2)
> Зачем её кэшировать? Статику надо сразу с диска отдавать, т.е. отключить запуск > скрипта php по этому пути.Я же писал, что картинку генерит симфони, т.е. по сути запрос вида /static/image/template/1234.png реврайтится на app.php?route=/static/image/template/1234.png и тот уже генерирует и отдает картинку. И вот чтобы каждый раз не нагружать бекенд (симфони) генерацией картинки, надо кешировать на стороне сервера
- Кеширование статики средствами apache, ALex_hha, 16:21 , 27-Апр-16 (3)
Поднял 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
- Кеширование статики средствами apache, eRIC, 12:50 , 28-Апр-16 (4)
> Я же писал, что картинку генерит симфони, т.е. по сути запрос вида > /static/image/template/1234.png реврайтится на app.php?route=/static/image/template/1234.png если не ошибаюсь это поведение указано в .htaccess файлe, в таком случае люди советуют включать агрессивное кеширование картинок на стороне клиента(через директивы Expire*) и использованием дополнительных оптимизаций включая varnish
- Кеширование статики средствами apache, ALex_hha, 14:29 , 28-Апр-16 (5)
> включать агрессивное кеширование картинок на стороне клиента(через директивы Expire*) На стороне клиента не вариант, не будет возможности точечного управления кешом, а иногда нужно > и использованием дополнительных оптимизаций включая varnish ну тогда я и nginx могу, просто это дополнительная прослойка. Неужели сам apache такое не умеет?
|