Оптимизация загрузки изображений и аватар -download/file.php

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение nissin »

drlov
Как уже здесь писали, оптимизацию я бы начал с отказа от apache в пользу nginx(как минимум для статики и download/file.php) либо lighttpd.
Особенность апача в модели prefork неэффективная отдача больших объёмов информации, процесс размером 20-30 мегабайт зависает до того момента пока файл полностью не уйдёт получателю. Когда начинают запрашивать много файлов одновременно, процессы апача забивают всю доступную память и начинают лезть в своп (либо заканчивается MaxClients и остальные запросы тупо ждут когда апач сможет их обслужить).
Поэтому я думаю, что перевод вложений в статику Вам мало поможет.
Другой вариант это использование worker модели апача, теоретически должно полегчать, но в этом случае php нужно переводить в режим FastCGI, как модуль он работать не будет.
Аватара пользователя
drlov
phpBB 1.2.1
Сообщения: 25
Стаж: 17 лет 8 месяцев
Откуда: Украина
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение drlov »

DK7 писал(а):
drlov писал(а):Спасибо, было бы интересно глянуть, особенно если там много картинок и они вставлены атачами и там хорошая посещаемость и есть факт наличия хотлинкинга на их атачи.
Картинок очень много. Около 10 гигов, и они выставлены атачами. И посещаемость хорошая. ( ну все относительно) Примерно 250-300 уникальных пользователей в сутки.
ссылка в личке.
У Вас превьюшки картинок, при загрузки темы, показываются не через скрипт, а напрямую вот так - files/thumbs/t_022_164.jpg, а только полные версии картинок уже грузятся через скрипт, а для этого нужно еще кликнуть по превьюшке, а это делают далеко не все, кто смотрит тему.
Да и посещаемость не достаточно высока.
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение nissin »

Кстати, если хотите, что бы картинки напрямую грузились попробуйте в таблице phpbb_extension_groups установить для нужных групп download_mode значение 2. В этом случае download/file будет делать редирект на физический файл, но при этом нужно ещё будет удалить файл .htaccess в каталоге files. Фрагмент кода кода, который за это отвечает:

Код: Выделить всё

	if ($download_mode == PHYSICAL_LINK)
	{
		// This presenting method should no longer be used
		if (!@is_dir($phpbb_root_path . $config['upload_path']))
		{
			trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']);
		}

		redirect($phpbb_root_path . $config['upload_path'] . '/' . $attachment['physical_filename']);
		file_gc();
	}
Добавлено спустя 10 минут 33 секунды:
Re: Оптимизация загрузки изображений и аватар -download/file.php
nissin писал(а):Поэтому я думаю, что перевод вложений в статику Вам мало поможет.
Был неправ, немного поможет, поскольку в данном случае процесс апача без php будет занимать меньше памяти (порядка 10 Мб).
Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Стаж: 22 года 6 месяцев
Откуда: СССР
Благодарил (а): 6 раз
Поблагодарили: 154 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение Mr. Anderson »

drlov писал(а):пока до конца не ясно что является источником проблемы на моем сервере
Сказанного вами в предыдущих сообщениях более, чем достаточно, чтобы поставить диагноз.
drlov писал(а):Особенно в свете того, что когда я смотрю моментальные снимки того что сейчас запрашивается с сервера и вижу как около 60-70% активных конекшенов забиты запросами к картинкам-атачам.
Не понял что тут такого особенного :) Вы думаете, что количество "активных коннекшенов" от перевода на "прямые рельсы" снизится? :) Да неужели? Файлы запрашиваться совсем перестанут? :?
drlov писал(а):и не факт что лишняя работа с отдачей картинок станет поперек развития в дальнейшем
Если сидеть и думать, что корень проблемы в file.php - тогда да, "станет". Уже, собственно...
drlov писал(а):я планирую
Планировать можно что угодно. Вы мне конкретнее скажите - что именно и как вы будете делать. И как потом отслеживать левые/не левые файлы и паразитный хотлинкинг.
И как это, по-вашему, решит проблему. Ибо, если вы еще не поняли, количество коннектов эта мера не снизит. Снизится, разве что, потребление памяти (но с этим у вас проблем нет, иначе как вы до лимита коннектов доходите?) и немного - время ожидания выдачи.
drlov писал(а):я не заметил там большого кол-ва вложений в темах, вернее вовсе не обнаружил картинки вставленные вложениями..
А где вы там вообще темы нашли? Там рейтинг самых больших форумов в мире. Отсеять по phpBB - раз плюнуть.
drlov писал(а):а в качестве конструктива, покажите реально работающий и с высокой посещаемостью форум с большим кол-вом вложений (например piatiiugol.com), вот тогда было бы интересно.
Я вам уже предлагал не придумывать мифических условий? :)
Вы сейчас смотрите форум на сервере, где крутятся проекты с сумарной посещаемостью, в несколько раз выше вашей. Имеем:

top - 21:00:17 up 5 days, 11:47, 1 user, load average: 0.05, 0.13, 0.09
Tasks: 159 total, 1 running, 155 sleeping, 2 stopped, 1 zombie

свой top покажете? :)

Ну или например phpbb.com - форум, где только аттачей скачивается в сутки больше, чем у вас суммарно "хитов вообще". Про посещаемость и прочие аспекты нагрузки я скромно промолчу, да ;)
MAzZY
Бывший член :)
Сообщения: 2925
Стаж: 21 год 4 месяца
Благодарил (а): 79 раз
Поблагодарили: 69 раз
Забанен: Бессрочно

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение MAzZY »

Mr. Anderson писал(а):1 zombie
Страшное дело

Добавлено спустя 1 час 34 минуты 6 секунд:
Re: Оптимизация загрузки изображений и аватар -download/file.php
drlov, Вы хотите ТИЦ картинками накачать? Они не дают его.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение rxu »

Загрузка через скрипт существует по соображениям безопасности, как ни странно.
Изображение
Аватара пользователя
drlov
phpBB 1.2.1
Сообщения: 25
Стаж: 17 лет 8 месяцев
Откуда: Украина
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение drlov »

Приветствую всех участников дискуссии!
То о чем я запрашивал в первом сообщении, я таки сам сделал, и результаты отличны!
Но обо всем по порядку, вначале отвечу на некоторые посты:
nissin писал(а):Как уже здесь писали, оптимизацию я бы начал с отказа от apache в пользу nginx(как минимум для статики и download/file.php)
download/file.php - это не статика! и nginx все запросы к атачам через download/file.php будет переьрасывать в апач.
Так что просто поставив nginx, ничего особенного не произойдет.
Но, я таки поставил nginx, и не меняя ничего в коде phpbb, протестировал и как и ожидалось ничего не поменялось. Т.е. страницы не стали грузится быстрее и сервер периодами падал при нагрузках..
nissin писал(а):Кстати, если хотите, что бы картинки напрямую грузились попробуйте в таблице phpbb_extension_groups установить для нужных групп download_mode значение 2. В этом случае download/file будет делать редирект на физический файл
Это можно назвать псевдо-напрямую, т.к. все равно запускается весь механизм - apache-php-msql.
Mr. Anderson писал(а):Сказанного вами в предыдущих сообщениях более, чем достаточно, чтобы поставить диагноз.
Здравствуйте Мистер Лечу По Фотографиям. ;)
Mr. Anderson писал(а):Не понял что тут такого особенного :) Вы думаете, что количество "активных коннекшенов" от перевода на "прямые рельсы" снизится? :) Да неужели? Файлы запрашиваться совсем перестанут? :?
У меня в моменты скачков, когда сервер ложился, по топу загрузка CPU стремилась к 100%.
Так что я преследовал цель снизить нагрузку. Что успешно и достиг.
Mr. Anderson писал(а):Планировать можно что угодно. Вы мне конкретнее скажите - что именно и как вы будете делать. И как потом отслеживать левые/не левые файлы и паразитный хотлинкинг.
Паразитных хотлинкинг я не собираюсь отслеживать, если б я его хотел запретить, то в .htaccess уже бы давно прописал пару строчек.
А касательно отслеживания левых/не левых файлов и конкретной реализации посмотрите в конце поста, я покажу реальное решение, сохраняющее ВЕСЬ функционал стандартных вложений.
Mr. Anderson писал(а):А где вы там вообще темы нашли? Там рейтинг самых больших форумов в мире. Отсеять по phpBB - раз плюнуть.
Я постараюсь не обратить внимание на называние меня в этом предложении идиотом.
Но судя по тому, что мне два раза пришлось объяснять планируемый мною алгоритм, делаю вывод что мне для Вас нужно немного более подробнее описывать некоторые детали, а то как в данном случае Вы не догадались, что я говорил о анализе топовых phpbb форумов из этого списка.
Mr. Anderson писал(а):Ну или например phpbb.com - форум, где только аттачей скачивается в сутки больше, чем у вас суммарно "хитов вообще". Про посещаемость и прочие аспекты нагрузки я скромно промолчу, да ;)
Ага, а еще скажите что все-все серверы в мире построены на одном и том же системнике из компьютерного магазина за уголом.
Я могу только догадываться какое железо используют админы phpbb.com и сколько там серверов.
И не нужно больше сравнивать, а то так Вы дойдете до сравнения посещаемости ВКонтакте.
MAzZY писал(а):Вы хотите ТИЦ картинками накачать? Они не дают его.
О... это отдельная тема и для другого форума...
Даже если предположить что не дают ТИЦ, то хотлинкинг это довольно естественная ссылочная масса.
Иначе спрашивается почему 99% популярных сайтов его не запрещают?
И даже более того, некоторые специально не ставят ватермарки на картинки, чтобы стимулировать хотлинкинг со своих сайтов...


-----------------------------------------------------------------------------------------------------

Итак, я таки сделал задуманное, перевел все запросы к вложениям через download/file.php в статику, при чем сохранился ВЕСЬ обычный функционал вложений, включая правку, удаление, добавление, поиск потеряных вложений и т.д.
На самом деле решение у задачи оказалось довольно простым.
Данное решение подходит даже если у вас уже есть сайт с большим кол-вом вложений.
Выкладываю его здесь, возможно поможет кому-то еще.

Принцип работы следующий, таблица вложений phpbb_attachments хранит физическое имя закаченного вложения в папку /files/ файла в поле physical_filename, там же в поле extension хранит расширение этого файла. Но при закачке вложений стандартный код phpbb закачивает файлы в папку /files/ без расширения.
Наша задача переименовать закачанные вложения, добавив к ним расширения, и переделать код таким образом чтобы при рендеринге темы все вложения были отображены прямыми ссылками на физические файлы.
(тем самым при установленном nginx мы вообще избежим запуска apache, а без nginx у нас не будет лишний раз запускаться php mysql, потребляя ресурсы).
Если в таблице вложений добавить к physical_filename его расширение, и одновременно с этим переименовать соответствующий файл в /files/, плюс если у данного вложения есть превьюшка нужно переименовать и ее, то функционал всей системы вложений phpbb не изменится.

Хоть данный код установлен и работает на живом сайте (смотреть в подписи), предупреждаю:
Внимание, данное решение публикуется для ознакомления программистам и администраторам, не рекомендуется его установка на рабочие сайты.

Код: Выделить всё

Title:
	physical filename attacment
Version:
    0.0.1 (alpha !)
Installation Level:
    Easy
Installation Time:
    ~5minutes
Author
	Oleg V.Lubarsky
Username:
    drlov
Email:
    trindelka(gog)gmail.com
	
Edits:
	
[OPEN]	
/files/.htaccess

[FIND]
<Files *>
	Order Allow,Deny
	Deny from All
</Files>

[REPLACE WITH]
#<Files *>
#	Order Allow,Deny
#	Deny from All
#</Files>

[OPEN]	
includes/functions_content.php	

[FIND]
		// Some basics...
		$attachment['extension'] = strtolower(trim($attachment['extension']));
		$filename = $phpbb_root_path . $config['upload_path'] . '/' . utf8_basename($attachment['physical_filename']);
		$thumbnail_filename = $phpbb_root_path . $config['upload_path'] . '/thumb_' . utf8_basename($attachment['physical_filename']);

[ADD AFTER]
		// physical filename attacment mod
		global $db;
		if (strpos($attachment['physical_filename'], '.') === false) {
			if (@rename($filename, $filename.'.'.$attachment['extension'])) {
				$sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
				SET physical_filename = "'.$attachment['physical_filename'].'.'.$attachment['extension'].'" 
				WHERE attach_id = '. $attachment['attach_id'];
				$db->sql_query($sql);
				$filename .= '.'.$attachment['extension'];
			}
			if ($attachment['thumbnail']) {
				if (@rename($thumbnail_filename, $thumbnail_filename.'.'.$attachment['extension'])) {
					$thumbnail_filename .= '.'.$attachment['extension'];
				}
			}
		}
		$block_array += array(
			'U_PHYSICAL_FILE'		=> $filename,
			'U_PHYSICAL_THUMB'		=> $thumbnail_filename,
		);

		
		
	
[OPEN]
includes/functions_upload.php

[FIND]
			case 'unique':
				$this->realname = $prefix . md5(unique_id());

[REPLACE WITH]
			case 'unique':
				$this->realname = $prefix . md5(unique_id()) . '.' . $this->extension;
				
				
[OPEN]
styles/prosilver/template/attachment.html

[IN LINE FIND]
			<a href="{_file.U_DOWNLOAD_LINK}"><img src="{_file.THUMB_IMAGE}" 

[IN-LINE REPLACE WITH]
			<a href="{_file.U_PHYSICAL_FILE}"><img src="{_file.U_PHYSICAL_THUMB}" 

[IN LINE FIND]
			<img src="{_file.U_INLINE_LINK}" alt="{_file.DOWNLOAD_NAME}" 

[IN-LINE REPLACE WITH]
			<img src="{_file.U_PHYSICAL_FILE}" alt="{_file.DOWNLOAD_NAME}" 
			
Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Стаж: 22 года 6 месяцев
Откуда: СССР
Благодарил (а): 6 раз
Поблагодарили: 154 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение Mr. Anderson »

drlov писал(а):download/file.php - это не статика
И что? Вам же написали (выделение мое)
nissin писал(а):для статики и download/file.php
drlov писал(а):и nginx все запросы к атачам через download/file.php будет переьрасывать в апач.Так что просто поставив nginx, ничего особенного не произойдет.
То, что вы мало что понимаете в том, о чем говорите, мы уже поняли. Зачем нас в этом еще раз убеждать? :?
drlov писал(а):протестировал и как и ожидалось ничего не поменялось
nginx недостаточно просто поставить. Его нужно настроить (+ изменить настройку апача) и все это богатство (пере)запустить.
Так что неудивительно, что ничего не изменилось, да ;)
drlov писал(а):Здравствуйте Мистер Лечу По Фотографиям.
Я, по крайней мере, ЗНАЮ о чем говорю :)
drlov писал(а):по топу загрузка CPU стремилась к 100%.
Может вы и свободную память еще через top измеряете? :)
drlov писал(а):Паразитных хотлинкинг я не собираюсь отслеживать, если б я его хотел запретить, то в .htaccess уже бы давно прописал пару строчек.
Ну вот опять... Вы даже не поняли о чем я. Раньше вам "пару строчек" в htaccess добавлять было не нужно - защиту от паразитного хотлинка давал движок.
Ну а теперь... Надеюсь, что вы не станете для каких-нибудь ушлых парней файлопомойкой.
drlov писал(а):я покажу реальное решение
Оно у вас на трынделке работает уже? Ну тогда ищите ;)
drlov писал(а):Я постараюсь не обратить внимание на называние меня в этом предложении идиотом.
А я совершенно не намерен не обращать внимания на приписывание мне слов, которых я не говорил. Ваши трудности с чтением и восприятием меня нисколько не касаются.
Пред. Бессрочный. Обсуждению и обжалованию не подлежит.
drlov писал(а):делаю вывод что мне для Вас
drlov писал(а):в данном случае Вы не догадались
Как вы там сами сказали только что? Здравствуй Мистер Лечу По Фотографиям? Ну-ну.
"Чем кумушек считать трудиться, не лучше ль на себя, кума, оборотиться?" (с)
Чисто на будущее - что написано, то и прочитано. Учитесь выражать мысли.
drlov писал(а):Я могу только догадываться какое железо используют админы phpbb.com и сколько там серверов.
Я могу вам сказать что там один сервер и даже железо его описать. Только вам же все равно, вы же все равно лучше знаете, да? :)
drlov писал(а):И не нужно больше сравнивать
Сказали бы проще - мне пофигу на чужой опыт и не приводите мне примеров.
Что до вконтактика... Я вам привел более реальный пример - наш сервер. Пример вы предпочли не заметить. ЧТД.
drlov писал(а):Иначе спрашивается почему 99% популярных сайтов его не запрещают?
Вы делаете далекоидущие выводы на недостаточных данных. (с)
А вообще... Посмотрите на такие-то сайты по нагрузке - не надо мне других, про хотлинкинг - посмотрите на других. Поразительная последовательность, да :)
drlov писал(а):чтобы стимулировать хотлинкинг со своих сайтов
Я бы не был так уверен именно в такой причинно-следственной связи ;)
Аватара пользователя
drlov
phpBB 1.2.1
Сообщения: 25
Стаж: 17 лет 8 месяцев
Откуда: Украина
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение drlov »

мда уж... вот и поговорили...
Mr. Anderson писал(а):nginx недостаточно просто поставить. Его нужно настроить (+ изменить настройку апача) и все это богатство (пере)запустить.
Так что неудивительно, что ничего не изменилось, да
вообще-то nginx мы в сервант ставили, для красоты )))
Извините, не сдержался....

Добавлено спустя 12 минут 15 секунд:
Re: Оптимизация загрузки изображений и аватар -download/file.php
Mr. Anderson писал(а):Ну а теперь... Надеюсь, что вы не станете для каких-нибудь ушлых парней файлопомойкой.
Не понимаю, а что собственно изменилось? И с чего вдруг появится файлопомойка?
MAzZY
Бывший член :)
Сообщения: 2925
Стаж: 21 год 4 месяца
Благодарил (а): 79 раз
Поблагодарили: 69 раз
Забанен: Бессрочно

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение MAzZY »

drlov писал(а):О... это отдельная тема и для другого форума...
Даже если предположить что не дают ТИЦ, то хотлинкинг это довольно естественная ссылочная масса.
Тиц не даёт, ссылочное даёт. Об этом недавно сам яндекс заявил. Поищите в его новостях(где-то в пределах пары месяцев)
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение nissin »

drlov
У Вас ведётся статистика типа munin или аналогичная по Apache, Nginx, MySQL, Load Average и т.д.?
Хотелось бы посмотреть изменения.
Аватара пользователя
drlov
phpBB 1.2.1
Сообщения: 25
Стаж: 17 лет 8 месяцев
Откуда: Украина
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение drlov »

nissin,
Нет, такая статистика не ведется, но чисто субъективно, сейчас стало работать гАраздо быстрее, особенно приятно созерцать как тема, с большим кол-во изображений, выстреливает.
Даже пользователи одобрительно высказываются.
Если раньше по apstat-у у меня показывало большое кол-во соединений на скачку вложений, то сейчас я их не вижу, они уже статика и ими nginx занимается.

Кстати, забыл сказать, в этом так называемом моде, не указан код по изменению прав на закачиваемые файлы, т.е. по умолчанию все файлы (вложения) закачиваются в папку /files/ с правами 0600, и их ngnix не отдает, поэтому нужно изменить еще код который устанавливает права на только что закаченные вложения.

И очень важно! Обязательно запретить группу вложений - "Текстовые файлы" !!!
Аватара пользователя
Berk
phpBB 2.0.2
Сообщения: 301
Стаж: 18 лет
Откуда: Украина, Киев
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение Berk »

И очень важно! Обязательно запретить группу вложений - "Текстовые файлы" !!!
почему?
MAzZY
Бывший член :)
Сообщения: 2925
Стаж: 21 год 4 месяца
Благодарил (а): 79 раз
Поблагодарили: 69 раз
Забанен: Бессрочно

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение MAzZY »

Потому что эксплоит загрузят

Добавлено спустя 1 минуту 43 секунды:
Re: Оптимизация загрузки изображений и аватар -download/file.php
Хотя, тут стоит еще подумать про загрузку штук, вроде file.gif?something, флэшек и прочего динамического контента.
А так же исполняемых файлов с расширением gif и jpg
Аватара пользователя
RedNaxi
Former team member
Сообщения: 933
Стаж: 19 лет 7 месяцев
Откуда: BeBoss.ru
Благодарил (а): 2 раза
Поблагодарили: 14 раз

Re: Оптимизация загрузки изображений и аватар -download/file

Сообщение RedNaxi »

drlov
возможно, у вас проблема была не с картинками а с базой данных, и ваше решение временно решило проблему с базой данных потому что немного снизило на нее нагрузку.
Попробуйте хотя бы http://blog.mysqltuner.com/ погонять посмотрите что покажет

Вернуться в «Поддержка phpBB 3.0.х»