Apache медленно отдает картинки

voituk

прозревший
Apache медленно отдает картинки

В какой-то момент времени, на тестовой машине Апач стал медленно отдавать картинки.
Т.е. Страница загрузилась, а потом медленно начинают подгружаться картинки.
Поначалу грешил на mod_rewrite, но вроде как он тут не причем.
Из-за чего это может быть?

Все это на
Windows 2000 Pro, Apache 1.3.31 mod_rewrite
PHP 4.3.10
 

Кром

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

alexhemp

Новичок
voituk
mod_rewrite может быть как раз очень причем. :) Например большой список правил, и нет условия в начале, что картинки не обрабатываем.
 

voituk

прозревший
alexhemp
Правило "не обрабатывать картинки" в начале есть.
Правил около 30.

Отключение обработки картинок для mod_rewrite выполняю так:
Код:
	RewriteEngine Off
	RewriteCond %{REQUEST_FILENAME} !.*/images/.*
	RewriteCond %{REQUEST_FILENAME} !.*/i/.* 
	RewriteEngine On
 

alexhemp

Новичок
попробуй чуть упростить выражения, запиши просто
!/images/ и !/i/
По идее они эквивалентны с твоими должны быть.
И еще наверное лучше не на путь реагировать а на расширения...

И у тебя зачем-то выключается mod_rewrite, потом включается назад... Это может влиять на директивы.

Но все-же убери Off в начале, и поставь только RewriteEngine On в самом начале .htaccess
 

voituk

прозревший
alexhemp
Как это зачем "выключается mod_rewrite" ?
Я же его сначала отключаю, а потом если не рисунки, то включаю таким правилом

RewriteCond %{REQUEST_FILENAME} !.*/images/.*
RewriteCond %{REQUEST_FILENAME} !.*/i/.*
RewriteEngine On

P.S. Может посоветуешь свой способ отключения mod_rewrite для всех картинок кроме некоторых?

-~{}~ 11.05.05 19:12:

Не ставить же перед каждым правилом эти 2 условия
RewriteCond %{REQUEST_FILENAME} !/images/
RewriteCond %{REQUEST_FILENAME} !/i/


Кром
Тестирую на локальной машине :)
Проблема возникает именно с картинками.

-~{}~ 11.05.05 19:16:

Может это из-за mod_gzip ?
Но вроде отключил сжатие для картинок.
Щас отключу mod_gzip и буду пробовать....

Эх как оно меня за... надоело вообщем
 

alexhemp

Новичок
voituk

Нет ты не прав - модуль нельзя выключить и включить в процессе парсинга директив :)

Просто перед всеми директивами поставь RewriteCond и дальше просмотр правил не будет идти.

Правильный вариант такой

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !/images/ [NC]
RewriteCond %{REQUEST_FILENAME} !/i/ [NC]
и дальше твои правила.

это значит

В данном каталоге задействовать mod_rewrite
Если приведенный адрес не содержит /images/ или /i/ (без учета регистра) то продолжить просмотр правил.

В самих правилах укажи опции [L,NC,NS]

Т.е. Last, No Case, No Sub-request
И еще я бы рекомендовал использовать %{REQUEST_URI} вместо {$REQUEST_FILENAME}
 

voituk

прозревший
Ясно, спасибо, будем пробовать...

-~{}~ 11.05.05 20:48:

Попробовал так:

RewriteEngine On
RewriteCond %{REQUEST_URI} /images/ [NC]
RewriteCond %{REQUEST_URI} /i/ [NC]
RewriteRule (.*) $1 [L,QSA,NS]
# .... другие 30 правил .... :)

Визуально ничего не изменилось

-~{}~ 11.05.05 20:51:

Дефрагментацию диска провести что-ли...
 

alexhemp

Новичок
voituk

Поробуй какой-нить WebServer stress tool :)
Приведи все правила, может у тебя какие-то долго выполняются...
 

voituk

прозревший
<IfModule mod_rewrite.c>

# Turn rewrite engine ON

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} /images/ [NC]
RewriteCond %{REQUEST_URI} /i/ [NC]
RewriteRule (.*) $1 [L,QSA,NS]

### Planner ###
RewriteRule ^/?calendar/([0-9]{4}\-[0-9]{2}\-[0-9]{2})?/?$ /planner.php?pl_d=$1 [QSA]

### UserInfo ###
RewriteRule ^/?userinfo/?$ /useredit.php [L,QSA]
RewriteRule ^/?user/?$ /useredit.php [L,QSA]

### Password forget page ###
RewriteRule ^/?remind_me/?$ /forget.php [L,QSA]

### Register page ###
RewriteRule ^/?register/?$ /register.php [L,QSA]

### WishList ###
RewriteRule ^/?i-wish/?([a-zA-Z0-9]*)/?$ /wishlist.php?wl_user=$1 [L,QSA]

### Publications ###
RewriteRule ^/?articles/?([a-zA-Z0-9\-\_]*)/([a-zA-Z0-9\-\_]*)(\.html)?$ /publication.php?pub_rid=$1&pub_pid=$2 [L,QSA]
RewriteRule ^/?news/?([a-zA-Z0-9\-\_]*)(\.html)?$ /publication.php?pub_news=1&pub_nid=$1 [L,QSA]

### Cart ###
RewriteRule ^/?cart/?$ /cart.php [L,QSA]

### Holiday ###
RewriteRule ^/?holiday/([0-9a-z_]*)/?$ /holiday.php?holiday_id=$1 [L,QSA]

### Sets ###
RewriteRule ^/?set/([0-9a-z_\-\.]*)/?$ /setview.php?set_id=$1 [L,QSA]

### FAQ ###

RewriteRule ^/?faq/?$ /messages.php?faq [L,QSA]
RewriteRule ^/?complaint-book/?$ messages.php?complantion [L,QSA]

### Partnership program ###
RewriteRule ^/?partnership/register/?$ partnership/reg_partner.php [L,QSA]
RewriteRule ^/?partnership/edit/?$ partnership/reg_partner.php?edit [L,QSA]
RewriteRule ^/?partnership/remind_me/?$ partnership/partner_login.php?remind [L,QSA]
RewriteRule ^/?partnership/login/?$ partnership/partner_login.php [L,QSA]
RewriteRule ^/?partnership/programs/?$ partnership/partnership_edit.php [L,QSA]
RewriteRule ^/?partnership/([a-zA-Z0-9\_\.\-]+)\.([0-9]+)\.xml$ partnership/getyml.php?login=$1&par_id=$2 [L,QSA]
RewriteRule ^/?partnership/programs/([a-z0-9\-\_]*)/?$ partnership/partnership_edit.php?psh_id=$1 [L,QSA]
RewriteRule ^/?partnership/about/?$ partnership/about.php [L,QSA]
RewriteRule ^/?partnership/programs/get_code/([a-z0-9\-\_]*)/?$ partnership/partnership_edit.php?get_code=$1 [L,QSA]
RewriteRule ^/?partnership/go\-([0-9]+)&([0-9]+)&([0-9]+)&?(.*)$ partnership/go.php?good_id=$1&partner_id=$2&partnership_id=$3&from=$4 [L,NE,QSA]

#Get images for partnership
RewriteRule ^/?goods/images/([0-9]+),([0-9]+)\.(.+)$ partnership/getimage.php?partnership_id=$1&good_id=$2 [L]

### Catalogue ###


RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?for-([A-Za-z0-9_\-]+)/?$ catview.php?group_id=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^.*for\-([a-zA-Z0-9\-_\.]+).*$ [NC]
RewriteRule ^/?([a-z0-9_\-]+)/([a-z0-9_\-]+)\.html$ goodview.php?cat_id=$1&good_id=$2&group_id=%1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^.*gplan.*$ [NC]
RewriteRule ^/?([a-z0-9_\-]+)/([a-z0-9_\-]+)\.html$ /gplan.php?cat_id=$1&gp_gid=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-z0-9_\-]+)/([a-z0-9_\-]+)\.html$ goodview.php?cat_id=$1&good_id=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-z0-9_\-]+)/?$ catview.php?cat_id=$1 [L,QSA]
</IfModule>
 

Кром

Новичок
Мда... Вот так mod_rewrite и превращается в ночной кошмар.
Такие вещи лучше делать по-другому:
Перенаправляешь одним условием все запросы (за исключением запросов к простым файлам) на index.php, передавая ему _GET запрос. В нем разбираешь запрос и в зависимости от условия подключаешь (include) нужный тебе файл.

Потом, я не понял. Тебе mod_rewrite мешает при загрузке или нет. Ты уже в этом разобрался?
 

alexhemp

Новичок
Кром

Да нормально так использовать... все на своем месте... Думаешь в скрипте быстрее будет?
Скрипт будет не меньше...

У меня не меньше набор используется для нагруженного форума (переписанный phpBB2) и все в порядке...

Похоже дело не в mod_rewrite... но чтобы окончательно убедиться - выключи его и загрузи страницу с параметрами. Т.е. прямо php скрипт, а потом сравни время загрузки со включенным mod_rewrite вызвав соотв. ему "прямой" адрес.

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

Вообще правила лучше ставить по убыванию частоты их использования.
 

voituk

прозревший
alexhemp
Ясно. Спасибо. Как "разгребусь" с материалами конференции - буду пробовать.

-~{}~ 14.05.05 12:00:

Отключил mod_rewrite - вроде картинки стали отдаваться быстрее...
Много думал, пил чай... Буду оптимизировать...
 
Сверху