1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Разгружаем скачивание вложений, если установлен nginx

Тема в разделе "Made in XF-Russia.ru", создана пользователем Yoskaldyr, 10.12.2010.

Загрузка
  1. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Это небольшая инструкция для тех у кого установлен nginx и кто хочет скачивать вложения любого размера не нагружая сервер.
    Также это инструкция для тех кто понимает как работают заголовки X-Accel-Redirect в nginx-е.
    Пока что это просто исправление исходного кода, но скорее всего
    Изменения требуют исправления файла library/XenForo/ViewPublic/Attachment/View.php
    найти в конце
    PHP:
    return file_get_contents($this->_params['attachmentFile']);
    или для 5-й беты:
    PHP:
    return new XenForo_FileOutput($this->_params['attachmentFile']);
    Заменить на:
    PHP:
    $this->_response->setHeader('X-Accel-Redirect'str_replace(XenForo_Application::getInstance()->getRootDir(),''$this->_params['attachmentFile']));
    return 
    '';
    Аналогичным образом можно поступить и с Lighttpd и апачем (с модулем mod_xsendfile), но придется исправлять название спец.заголовка на X-Sendfile и немного изменить вызов, т.е. в качестве строки замены получим:
    PHP:
    $this->_response->setHeader('X-Sendfile'$this->_params['attachmentFile']);
     return 
    '';
    По идее можно сделать и отдельным хаком, но думаю лучше попробовать уболтать разработчиков внести в стандартный функционал xf.

    P.S. Вариант с лайти и апачем не проверял, т.к. негде.
     
    phpclub, syn, Андрей Х и 5 другим нравится это.
  2. wiz

    wiz Местный

    Регистрация:
    22.10.10
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.0 Final
    Было бы неплохо ещё конфиг nginx выложить соответствующий :rolleyes:
     
  3. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Данная модификация не имеет никакого отношения к конфигу nginx-а. Подразумевается что все уже установлено и настроено. Если XF уже работает под nginx-ом то будет работать и эта модификация.
     
  4. wiz

    wiz Местный

    Регистрация:
    22.10.10
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.0 Final
    ну для тупых выложи плз, у которых ничего не настроено :confused:

    Кстати, можно же ещё не только x-accel-redirect использовать, но и какие-то части статики завернуть в nginx. Кто-нибудь уже разобрался какие альясы куда указывать?
     
  5. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    А поиском воспользоваться? http://www.xf-russia.ru/forum/threads/Правила-для-работы-xenforo-под-nginx.140/
     
  6. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Пока прикрепляю хак здесь, т.к. не определился с точным названием. Работает только начиная с 5-й беты!

    Так же не помешал бы тест хака. Если все будет ок, то буду просить добавить этот функционал в стандартный код XF, т.к. это увеличит код всего на 1 или 2 строчки, а пользы в довольно много на highload конфигурациях
     

    Вложения:

    Romchik® и ANGEL OF FIRE нравится это.
  7. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    А как его тестить? :)
     
  8. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    В админке в настройках в группе Вложения - появится одна доп настройка где можно выбирать режим скачивания - по умолчанию (встроенный в XenForo), X-Accel-Redirect или X-Sendfile.

    Если нет ни nginx-а, ни lighttpd, ни апача с модулем mod_xsendfile, то и тестить нечего :)
    Nginx я протестировал, т.е. работу через X-Accel-Redirect, вот лайти у меня нет и апача с таким модулем тоже, поэтому X-Sendfile проверить не могу, хотя по идее без проблем должно работать судя по документации :)
     
    phpclub, Ra и Romchik® нравится это.
  9. Union

    Union Местный

    Регистрация:
    12.10.11
    Сообщения:
    306
    Симпатии:
    86
    Версия XF:
    1.1.2
    А данный хак будет работать если для статики nginx, а так apache?
     
  10. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Будет. Как раз для таких случаев он и написан. В результате работы хака апач вместо того чтобы отдавать файл nginx-у, отдает спец. заголовок, в результате чего файл отдает уже сам nginx, как обычную статику.
     
  11. Narwen

    Narwen Активный пользователь

    Регистрация:
    23.12.10
    Сообщения:
    55
    Симпатии:
    11
    Версия XF:
    1.1.2
    А оно работает (и актуально ли) с 1.1 версией форума?
     
  12. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Полностью. Хак работает со всеми вложениями форума, включая вложения хаков для форума, к примеру альбомы или вики.
     
    Azaliya Yunusova нравится это.
  13. Narwen

    Narwen Активный пользователь

    Регистрация:
    23.12.10
    Сообщения:
    55
    Симпатии:
    11
    Версия XF:
    1.1.2
    У меня настроена связка Apache+nginx, выбрала режим X-Accel-Redirect Header, но картинки перестали грузится :( видимо у меня как-то настроено на сервере криво.
     
  14. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Какая версия nginx? Просто в очень древних версиях nginx-а нет поддержки X-Accel-Redirect
    В общем хак хоть и банально простой, но все-таки под определенную конфигурацию сервера и требует админских знаний для более точной настройки сервера (именно настройки сервера, т.е. nginx/apache/php, а не настройки хака)
     
  15. Narwen

    Narwen Активный пользователь

    Регистрация:
    23.12.10
    Сообщения:
    55
    Симпатии:
    11
    Версия XF:
    1.1.2
    Написано, что nginx-1.1.1-1.el5
    В этом дело?
     
  16. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Нет, точно не в этом дело, т.к. nginx явно свежий. Посмотрите по логам nginx-а и апача какая ошибка происходит при попытке скачивания.
     
  17. ANGEL OF FIRE

    ANGEL OF FIRE Модератор

    Регистрация:
    06.11.11
    Сообщения:
    395
    Симпатии:
    180
    Версия XF:
    1.1.3
    У многих форум, находится в папке /forum, а не в директории. Вот тогда и проблемы, атачи просто не отображаются.
     
  18. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Ну не знаю - только что проверил на своем конфиге и перенес тестовый форум на уровень ниже - все нормально работает. Хак проверяет полный путь до корня форума (используя стандартные методы ксена) и ему абсолютно все равно на то где находится форум по отношению к корню сайта (по крайней мере 100% могу сказать насчет nginx-а, т.к. поддержку модуля апача не тестировал, ибо негде).

    Сказать почему именно не открываются вложения не могу, т.к. проблема может быть где угодно, как в конфиге nginx-а, так и в конфиге апача/пхп.
     
    ANGEL OF FIRE нравится это.
  19. ANGEL OF FIRE

    ANGEL OF FIRE Модератор

    Регистрация:
    06.11.11
    Сообщения:
    395
    Симпатии:
    180
    Версия XF:
    1.1.3
    Поигрался немного с настройками нгикса. Работает. Спасибо большое.
     
  20. Narwen

    Narwen Активный пользователь

    Регистрация:
    23.12.10
    Сообщения:
    55
    Симпатии:
    11
    Версия XF:
    1.1.2
    а если не секрет, то что именно изменили?
     

Поделиться этой страницей